Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- DataTracker_V2
- Optimization enabled
- false
- Compiler version
- v0.8.20+commit.a1b79de6
- EVM Version
- shanghai
- Verified at
- 2025-12-11T14:43:23.396742Z
src/DataTracker_V2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
contract DataTracker_V2 is Ownable {
event TrackedEvent(bytes32 indexed hash, string indexed instanceKey, string url);
error StringNotURL(string url);
bytes32 private constant HTTP = keccak256(abi.encodePacked("http://"));
bytes32 private constant HTTPS = keccak256(abi.encodePacked("https://"));
mapping(bytes32 hash => mapping(string instanceKey => string url)) private _trackedEvent;
constructor() Ownable(msg.sender) {}
modifier isURL(string memory url) {
bytes memory bytesUrl = bytes(url);
if (bytesUrl.length < 7) {
revert StringNotURL(url);
}
bytes memory httpStringBytes = new bytes(7);
bytes memory httpsStringBytes = new bytes(8);
for (uint256 i = 0; i < httpStringBytes.length; i++) {
httpStringBytes[i] = bytesUrl[i];
}
for (uint256 i = 0; i < httpsStringBytes.length; i++) {
httpsStringBytes[i] = bytesUrl[i];
}
string memory httpStringUrl = string(httpStringBytes);
string memory httpsStringUrl = string(httpsStringBytes);
if (keccak256(abi.encodePacked(httpStringUrl)) != HTTP && keccak256(abi.encodePacked(httpsStringUrl)) != HTTPS)
{
revert StringNotURL(url);
}
_;
}
function _trackNewEvent(bytes32 hash, string calldata instanceKey, string calldata url)
internal
virtual
onlyOwner
isURL(url)
{
_trackedEvent[hash][instanceKey] = url;
emit TrackedEvent(hash, instanceKey, url);
}
function trackNewEvent(bytes32 hash, string calldata instanceKey, string calldata url) external onlyOwner {
_trackNewEvent(hash, instanceKey, url);
}
function trackedEvent(bytes32 hash, string calldata instanceKey) external view returns (string memory) {
return _trackedEvent[hash][instanceKey];
}
}
lib/openzeppelin-contracts/contracts/access/Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
lib/openzeppelin-contracts/contracts/utils/Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
Compiler Settings
{"viaIR":false,"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":false},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"libraries":{},"evmVersion":"shanghai"}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"error","name":"StringNotURL","inputs":[{"type":"string","name":"url","internalType":"string"}]},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"TrackedEvent","inputs":[{"type":"bytes32","name":"hash","internalType":"bytes32","indexed":true},{"type":"string","name":"instanceKey","internalType":"string","indexed":true},{"type":"string","name":"url","internalType":"string","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"trackNewEvent","inputs":[{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"string","name":"instanceKey","internalType":"string"},{"type":"string","name":"url","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"trackedEvent","inputs":[{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"string","name":"instanceKey","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Contract Creation Code
0x608060405234801561000f575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610081575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100789190610196565b60405180910390fd5b6100908161009660201b60201c565b506101af565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61018082610157565b9050919050565b61019081610176565b82525050565b5f6020820190506101a95f830184610187565b92915050565b610ff7806101bc5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80630fb85af814610059578063715018a614610075578063842bdefa1461007f5780638da5cb5b146100af578063f2fde38b146100cd575b5f80fd5b610073600480360381019061006e9190610830565b6100e9565b005b61007d610105565b005b610099600480360381019061009491906108c1565b610118565b6040516100a691906109a8565b60405180910390f35b6100b76101d9565b6040516100c49190610a07565b60405180910390f35b6100e760048036038101906100e29190610a4a565b610200565b005b6100f1610284565b6100fe858585858561030b565b5050505050565b61010d610284565b6101165f6106cc565b565b606060015f8581526020019081526020015f20838360405161013b929190610ab1565b9081526020016040518091039020805461015490610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461018090610af6565b80156101cb5780601f106101a2576101008083540402835291602001916101cb565b820191905f5260205f20905b8154815290600101906020018083116101ae57829003601f168201915b505050505090509392505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610208610284565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610278575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161026f9190610a07565b60405180910390fd5b610281816106cc565b50565b61028c61078d565b73ffffffffffffffffffffffffffffffffffffffff166102aa6101d9565b73ffffffffffffffffffffffffffffffffffffffff1614610309576102cd61078d565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103009190610a07565b60405180910390fd5b565b610313610284565b81818080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505f8190506007815110156103a257816040517f09564c9400000000000000000000000000000000000000000000000000000000815260040161039991906109a8565b60405180910390fd5b5f600767ffffffffffffffff8111156103be576103bd610b26565b5b6040519080825280601f01601f1916602001820160405280156103f05781602001600182028036833780820191505090505b5090505f600867ffffffffffffffff81111561040f5761040e610b26565b5b6040519080825280601f01601f1916602001820160405280156104415781602001600182028036833780820191505090505b5090505f5b82518110156104c15783818151811061046257610461610b53565b5b602001015160f81c60f81b8382815181106104805761047f610b53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080806104b990610bb6565b915050610446565b505f5b815181101561053f578381815181106104e0576104df610b53565b5b602001015160f81c60f81b8282815181106104fe576104fd610b53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350808061053790610bb6565b9150506104c4565b505f8290505f82905060405160200161055790610c47565b604051602081830303815290604052805190602001208260405160200161057e9190610c8b565b60405160208183030381529060405280519060200120141580156105ec57506040516020016105ac90610ceb565b60405160208183030381529060405280519060200120816040516020016105d39190610c8b565b6040516020818303038152906040528051906020012014155b1561062e57856040517f09564c9400000000000000000000000000000000000000000000000000000000815260040161062591906109a8565b60405180910390fd5b878760015f8e81526020019081526020015f208c8c604051610651929190610ab1565b9081526020016040518091039020918261066c929190610ea6565b50898960405161067d929190610ab1565b60405180910390208b7ff72bf3081c212164719721d80aaef014e466a92a007194f59610e66c4e4e46798a8a6040516106b7929190610f9f565b60405180910390a35050505050505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f80fd5b5f819050919050565b6107ae8161079c565b81146107b8575f80fd5b50565b5f813590506107c9816107a5565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126107f0576107ef6107cf565b5b8235905067ffffffffffffffff81111561080d5761080c6107d3565b5b602083019150836001820283011115610829576108286107d7565b5b9250929050565b5f805f805f6060868803121561084957610848610794565b5b5f610856888289016107bb565b955050602086013567ffffffffffffffff81111561087757610876610798565b5b610883888289016107db565b9450945050604086013567ffffffffffffffff8111156108a6576108a5610798565b5b6108b2888289016107db565b92509250509295509295909350565b5f805f604084860312156108d8576108d7610794565b5b5f6108e5868287016107bb565b935050602084013567ffffffffffffffff81111561090657610905610798565b5b610912868287016107db565b92509250509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561095557808201518184015260208101905061093a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61097a8261091e565b6109848185610928565b9350610994818560208601610938565b61099d81610960565b840191505092915050565b5f6020820190508181035f8301526109c08184610970565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109f1826109c8565b9050919050565b610a01816109e7565b82525050565b5f602082019050610a1a5f8301846109f8565b92915050565b610a29816109e7565b8114610a33575f80fd5b50565b5f81359050610a4481610a20565b92915050565b5f60208284031215610a5f57610a5e610794565b5b5f610a6c84828501610a36565b91505092915050565b5f81905092915050565b828183375f83830152505050565b5f610a988385610a75565b9350610aa5838584610a7f565b82840190509392505050565b5f610abd828486610a8d565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b0d57607f821691505b602082108103610b2057610b1f610ac9565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f819050919050565b5f610bc082610bad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610bf257610bf1610b80565b5b600182019050919050565b7f687474703a2f2f000000000000000000000000000000000000000000000000005f82015250565b5f610c31600783610a75565b9150610c3c82610bfd565b600782019050919050565b5f610c5182610c25565b9150819050919050565b5f610c658261091e565b610c6f8185610a75565b9350610c7f818560208601610938565b80840191505092915050565b5f610c968284610c5b565b915081905092915050565b7f68747470733a2f2f0000000000000000000000000000000000000000000000005f82015250565b5f610cd5600883610a75565b9150610ce082610ca1565b600882019050919050565b5f610cf582610cc9565b9150819050919050565b5f82905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610d2a565b610d6f8683610d2a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610daa610da5610da084610bad565b610d87565b610bad565b9050919050565b5f819050919050565b610dc383610d90565b610dd7610dcf82610db1565b848454610d36565b825550505050565b5f90565b610deb610ddf565b610df6818484610dba565b505050565b5b81811015610e1957610e0e5f82610de3565b600181019050610dfc565b5050565b601f821115610e5e57610e2f81610d09565b610e3884610d1b565b81016020851015610e47578190505b610e5b610e5385610d1b565b830182610dfb565b50505b505050565b5f82821c905092915050565b5f610e7e5f1984600802610e63565b1980831691505092915050565b5f610e968383610e6f565b9150826002028217905092915050565b610eb08383610cff565b67ffffffffffffffff811115610ec957610ec8610b26565b5b610ed38254610af6565b610ede828285610e1d565b5f601f831160018114610f0b575f8415610ef9578287013590505b610f038582610e8b565b865550610f6a565b601f198416610f1986610d09565b5f5b82811015610f4057848901358255600182019150602085019450602081019050610f1b565b86831015610f5d5784890135610f59601f891682610e6f565b8355505b6001600288020188555050505b50505050505050565b5f610f7e8385610928565b9350610f8b838584610a7f565b610f9483610960565b840190509392505050565b5f6020820190508181035f830152610fb8818486610f73565b9050939250505056fea264697066735822122053779d7357f09e1d61748daaf2908797fd696ab84b6f8c9edb03b377a741ccff64736f6c63430008140033
Deployed ByteCode
0x608060405234801561000f575f80fd5b5060043610610055575f3560e01c80630fb85af814610059578063715018a614610075578063842bdefa1461007f5780638da5cb5b146100af578063f2fde38b146100cd575b5f80fd5b610073600480360381019061006e9190610830565b6100e9565b005b61007d610105565b005b610099600480360381019061009491906108c1565b610118565b6040516100a691906109a8565b60405180910390f35b6100b76101d9565b6040516100c49190610a07565b60405180910390f35b6100e760048036038101906100e29190610a4a565b610200565b005b6100f1610284565b6100fe858585858561030b565b5050505050565b61010d610284565b6101165f6106cc565b565b606060015f8581526020019081526020015f20838360405161013b929190610ab1565b9081526020016040518091039020805461015490610af6565b80601f016020809104026020016040519081016040528092919081815260200182805461018090610af6565b80156101cb5780601f106101a2576101008083540402835291602001916101cb565b820191905f5260205f20905b8154815290600101906020018083116101ae57829003601f168201915b505050505090509392505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610208610284565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610278575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161026f9190610a07565b60405180910390fd5b610281816106cc565b50565b61028c61078d565b73ffffffffffffffffffffffffffffffffffffffff166102aa6101d9565b73ffffffffffffffffffffffffffffffffffffffff1614610309576102cd61078d565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103009190610a07565b60405180910390fd5b565b610313610284565b81818080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505f8190506007815110156103a257816040517f09564c9400000000000000000000000000000000000000000000000000000000815260040161039991906109a8565b60405180910390fd5b5f600767ffffffffffffffff8111156103be576103bd610b26565b5b6040519080825280601f01601f1916602001820160405280156103f05781602001600182028036833780820191505090505b5090505f600867ffffffffffffffff81111561040f5761040e610b26565b5b6040519080825280601f01601f1916602001820160405280156104415781602001600182028036833780820191505090505b5090505f5b82518110156104c15783818151811061046257610461610b53565b5b602001015160f81c60f81b8382815181106104805761047f610b53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080806104b990610bb6565b915050610446565b505f5b815181101561053f578381815181106104e0576104df610b53565b5b602001015160f81c60f81b8282815181106104fe576104fd610b53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350808061053790610bb6565b9150506104c4565b505f8290505f82905060405160200161055790610c47565b604051602081830303815290604052805190602001208260405160200161057e9190610c8b565b60405160208183030381529060405280519060200120141580156105ec57506040516020016105ac90610ceb565b60405160208183030381529060405280519060200120816040516020016105d39190610c8b565b6040516020818303038152906040528051906020012014155b1561062e57856040517f09564c9400000000000000000000000000000000000000000000000000000000815260040161062591906109a8565b60405180910390fd5b878760015f8e81526020019081526020015f208c8c604051610651929190610ab1565b9081526020016040518091039020918261066c929190610ea6565b50898960405161067d929190610ab1565b60405180910390208b7ff72bf3081c212164719721d80aaef014e466a92a007194f59610e66c4e4e46798a8a6040516106b7929190610f9f565b60405180910390a35050505050505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f80fd5b5f819050919050565b6107ae8161079c565b81146107b8575f80fd5b50565b5f813590506107c9816107a5565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126107f0576107ef6107cf565b5b8235905067ffffffffffffffff81111561080d5761080c6107d3565b5b602083019150836001820283011115610829576108286107d7565b5b9250929050565b5f805f805f6060868803121561084957610848610794565b5b5f610856888289016107bb565b955050602086013567ffffffffffffffff81111561087757610876610798565b5b610883888289016107db565b9450945050604086013567ffffffffffffffff8111156108a6576108a5610798565b5b6108b2888289016107db565b92509250509295509295909350565b5f805f604084860312156108d8576108d7610794565b5b5f6108e5868287016107bb565b935050602084013567ffffffffffffffff81111561090657610905610798565b5b610912868287016107db565b92509250509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561095557808201518184015260208101905061093a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61097a8261091e565b6109848185610928565b9350610994818560208601610938565b61099d81610960565b840191505092915050565b5f6020820190508181035f8301526109c08184610970565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109f1826109c8565b9050919050565b610a01816109e7565b82525050565b5f602082019050610a1a5f8301846109f8565b92915050565b610a29816109e7565b8114610a33575f80fd5b50565b5f81359050610a4481610a20565b92915050565b5f60208284031215610a5f57610a5e610794565b5b5f610a6c84828501610a36565b91505092915050565b5f81905092915050565b828183375f83830152505050565b5f610a988385610a75565b9350610aa5838584610a7f565b82840190509392505050565b5f610abd828486610a8d565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b0d57607f821691505b602082108103610b2057610b1f610ac9565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f819050919050565b5f610bc082610bad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610bf257610bf1610b80565b5b600182019050919050565b7f687474703a2f2f000000000000000000000000000000000000000000000000005f82015250565b5f610c31600783610a75565b9150610c3c82610bfd565b600782019050919050565b5f610c5182610c25565b9150819050919050565b5f610c658261091e565b610c6f8185610a75565b9350610c7f818560208601610938565b80840191505092915050565b5f610c968284610c5b565b915081905092915050565b7f68747470733a2f2f0000000000000000000000000000000000000000000000005f82015250565b5f610cd5600883610a75565b9150610ce082610ca1565b600882019050919050565b5f610cf582610cc9565b9150819050919050565b5f82905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610d2a565b610d6f8683610d2a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610daa610da5610da084610bad565b610d87565b610bad565b9050919050565b5f819050919050565b610dc383610d90565b610dd7610dcf82610db1565b848454610d36565b825550505050565b5f90565b610deb610ddf565b610df6818484610dba565b505050565b5b81811015610e1957610e0e5f82610de3565b600181019050610dfc565b5050565b601f821115610e5e57610e2f81610d09565b610e3884610d1b565b81016020851015610e47578190505b610e5b610e5385610d1b565b830182610dfb565b50505b505050565b5f82821c905092915050565b5f610e7e5f1984600802610e63565b1980831691505092915050565b5f610e968383610e6f565b9150826002028217905092915050565b610eb08383610cff565b67ffffffffffffffff811115610ec957610ec8610b26565b5b610ed38254610af6565b610ede828285610e1d565b5f601f831160018114610f0b575f8415610ef9578287013590505b610f038582610e8b565b865550610f6a565b601f198416610f1986610d09565b5f5b82811015610f4057848901358255600182019150602085019450602081019050610f1b565b86831015610f5d5784890135610f59601f891682610e6f565b8355505b6001600288020188555050505b50505050505050565b5f610f7e8385610928565b9350610f8b838584610a7f565b610f9483610960565b840190509392505050565b5f6020820190508181035f830152610fb8818486610f73565b9050939250505056fea264697066735822122053779d7357f09e1d61748daaf2908797fd696ab84b6f8c9edb03b377a741ccff64736f6c63430008140033