0 txs
33 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
attestationByHash
viewfunction attestationByHash(bytes32 attestationHash) view returns (tuple)
attestationById
viewfunction attestationById(uint256) view returns (bool archived, uint256 attestationId, uint256 profileId, uint256 createdAt, string account, string service)
attestationCount
viewfunction attestationCount() view returns (uint256)
attestationExistsForHash
viewfunction attestationExistsForHash(bytes32 attestationHash) view returns (bool)
attestationHashesByProfileId
viewfunction attestationHashesByProfileId(uint256, uint256) view returns (bytes32)
attestationIdByHash
viewfunction attestationIdByHash(bytes32) view returns (uint256)
contractAddressManager
viewfunction contractAddressManager() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
expectedSigner
viewfunction expectedSigner() view returns (address)
getAttestationByHash
viewfunction getAttestationByHash(bytes32 _hash) view returns (tuple attestation)
getAttestationHashesByProfileId
viewfunction getAttestationHashesByProfileId(uint256 profileId) view returns (bytes32[])
getAttestationIndexByProfileIdAndHash
viewfunction getAttestationIndexByProfileIdAndHash(uint256 profileId, bytes32 attestationHash) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
getServiceAndAccountHash
purefunction getServiceAndAccountHash(string service, string account) pure returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
signatureUsed
viewfunction signatureUsed(bytes) view returns (bool)
signatureVerifier
viewfunction signatureVerifier() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
targetExistsAndAllowedForId
viewfunction targetExistsAndAllowedForId(uint256 targetId) view returns (bool exist, bool allowed)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addAdmin
nonpayablefunction addAdmin(address admin)
archiveAttestation
nonpayablefunction archiveAttestation(bytes32 attestationHash)
createAttestation
nonpayablefunction createAttestation(uint256 profileId, uint256 randValue, tuple attestationDetails, string evidence, bytes signature)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, address admin, address expectedSigner, address signatureVerifier, address contractAddressManagerAddr)
pause
nonpayablefunction pause()
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
restoreAttestation
nonpayablefunction restoreAttestation(bytes32 attestationHash)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
unpause
nonpayablefunction unpause()
updateContractAddressManager
nonpayablefunction updateContractAddressManager(address contractAddressesAddr)
updateExpectedSigner
nonpayablefunction updateExpectedSigner(address signer)
updateOwner
nonpayablefunction updateOwner(address owner)
updateSignatureVerifier
nonpayablefunction updateSignatureVerifier(address sinatureVerifier)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AttestationArchived
event AttestationArchived(uint256 indexed profileId, string service, string account, uint256 indexed attestationId)
AttestationClaimed
event AttestationClaimed(uint256 indexed attestationId, string service, string account, string evidence, uint256 indexed profileId)
AttestationCreated
event AttestationCreated(uint256 indexed profileId, string service, string account, string evidence, uint256 indexed attestationId)
AttestationRestored
event AttestationRestored(uint256 indexed attestationId, string service, string account, uint256 indexed profileId)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressNotInProfile
error AddressNotInProfile(address _address, uint256 profileId)
AttestationAlreadyExists
error AttestationAlreadyExists(bytes32 attestationHash)
AttestationInvalid
error AttestationInvalid(string service, string account)
AttestationNotArchived
error AttestationNotArchived(bytes32 attestationHash)
AttestationNotFound
error AttestationNotFound(bytes32 attestationHash)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
NotInitializing
error NotInitializing()
ProfileNotFound
error ProfileNotFound(uint256 profileId)
SignatureWasUsed
error SignatureWasUsed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040523461003257610011610037565b604051613a436101c182396080518181816130d2015261324d0152613a4390f35b600080fd5b61003f61007e565b610047610112565b565b61005d90610060906001600160a01b031682565b90565b6001600160a01b031690565b61005d90610049565b61005d9061006c565b610086610094565b61008f30610075565b608052565b61004761003f565b61005d9060401c60ff1690565b61005d905461009c565b61005d905b6001600160401b031690565b61005d90546100b3565b61005d906100b8906001600160401b031682565b906100f261005d61010e926100ce565b82546001600160401b0319166001600160401b03919091161790565b9055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061013c816100a9565b6101ae57610149816100c4565b6001600160401b0391908290811603610160575050565b8161018f7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2936101a9936100e2565b604051918291826001600160401b03909116815260200190565b0390a1565b63f92ee8a960e01b6000908152600490fdfe6080604052600436101561001257600080fd5b60003560e01c8063018a198c146102bd57806301ffc9a7146102b8578063051d0702146102b357806308473f64146102ae5780631459457a146102a95780631785f53c146102a457806320eb59971461029f578063248a9ca31461029a5780632bdd87ff146102955780632cb3e494146102905780632f2ff15d1461028b57806336568abe146102865780633f4ba83a1461028157806341345d961461027c5780634f1ef2861461027757806352d1902d146102725780635667981b1461026d5780635c975abb146102685780637048027514610263578063719389471461025e57806375b238fc146102595780638456cb5914610254578063880cdc311461024f5780638db70da41461024a5780639010d07c1461024557806391d14854146102405780639d29a50314610227578063a12c64b51461023b578063a15b932114610236578063a217fddf14610231578063a3246ad31461022c578063a55d54e014610227578063ad3cb1cc14610222578063ade9ae971461021d578063bb10c82914610218578063bd27df1014610213578063c3c492011461020e578063ca15c87314610209578063d547741f14610204578063e58378bb146101ff578063ed6a24e1146101fa578063efb32994146101f55763fde919f6036102cb576110b1565b61108a565b61106f565b61102d565b611014565b610ff9565b610fdd565b610f51565b610ee7565b610e19565b610da7565b610bed565b610d2a565b610c9f565b610c72565b610c14565b610b5d565b610b41565b610b22565b610ac2565b610aaa565b610a83565b610a4f565b6107f8565b6107dd565b6107c5565b6107aa565b610796565b610683565b61066b565b610652565b610639565b6105e8565b61059b565b610580565b610561565b610484565b610468565b610404565b6103ab565b61036a565b610309565b805b036102cb57565b600080fd5b905035906102dd826102c2565b565b91906040838203126102cb576103029060206102fb82866102d0565b94016102d0565b90565b9052565b346102cb5761033561032561031f3660046102df565b906110cc565b6040519182918290815260200190565b0390f35b6001600160e01b031981166102c4565b905035906102dd82610339565b906020828203126102cb5761030291610349565b346102cb57610335610385610380366004610356565b611135565b60405191829182901515815260200190565b906020828203126102cb57610302916102d0565b346102cb576103c36103be366004610397565b6114d5565b604051005b6001600160a01b031690565b6001600160a01b0381166102c4565b905035906102dd826103d4565b906020828203126102cb57610302916103e3565b346102cb576103c36104173660046103f0565b61153c565b919060a0838203126102cb5761043281846103e3565b9261044082602083016103e3565b9261030261045184604085016103e3565b93608061046182606087016103e3565b94016103e3565b346102cb576103c361047b36600461041c565b939290926117a1565b346102cb576103c36104973660046103f0565b6117e4565b908160409103126102cb5790565b909182601f830112156102cb578135916001600160401b0383116102cb5760200192600183028401116102cb57565b909160a0828403126102cb576104ef83836102d0565b926104fd81602085016102d0565b9260408101356001600160401b0381116102cb578261051d91830161049c565b9260608201356001600160401b0381116102cb578361053d9184016104aa565b92909360808201356001600160401b0381116102cb5761055d92016104aa565b9091565b346102cb576103c36105743660046104d9565b95949094939193611eff565b346102cb57610335610325610596366004610397565b611f0e565b346102cb576103c36105ae3660046103f0565b611f5c565b60009103126102cb57565b610302916008021c6001600160a01b031690565b9061030291546105be565b6103026000806105d2565b346102cb576105f83660046105b3565b6103356106036105dd565b604051918291826001600160a01b03909116815260200190565b91906040838203126102cb5761030290602061046182866102d0565b346102cb576103c361064c36600461061d565b90611f80565b346102cb576103c361066536600461061d565b90611f8a565b346102cb5761067b3660046105b3565b6103c3612116565b346102cb576103c3610696366004610397565b61230e565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176106d257604052565b61069b565b906102dd6106e460405190565b92836106b1565b6001600160401b0381116106d257602090601f01601f19160190565b0190565b90826000939282370152565b9092919261072c610727826106eb565b6106d7565b93818552818301116102cb576102dd91602085019061070b565b9080601f830112156102cb5781602061030293359101610717565b9190916040818403126102cb5761077883826103e3565b9260208201356001600160401b0381116102cb576103029201610746565b6103c36107a4366004610761565b90612337565b346102cb576107ba3660046105b3565b610335610325612384565b346102cb576103c36107d83660046103f0565b6123b2565b346102cb576107ed3660046105b3565b6103356103856123bb565b346102cb576103c361080b3660046103f0565b6123f6565b6103026103026103029290565b9061082790610810565b600052602052604060002090565b610302905b60ff1690565b6103029054610835565b6103029081565b610302905461084a565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610891575b602083101461088c57565b61085b565b91607f1691610881565b805460009392916108b86108ae83610871565b8085529360200190565b916001811690811561090a57506001146108d157505050565b6108e49192939450600052602060002090565b916000925b8184106108f65750500190565b8054848401526020909301926001016108e9565b92949550505060ff1916825215156020020190565b906103029161089b565b906102dd6109439261093a60405190565b9384809261091f565b03836106b1565b61095590603761081d565b9061095f82610840565b9161096c60018201610851565b9161097960028301610851565b9161098660038201610851565b91610302600561099860048501610929565b9301610929565b60005b8381106109b25750506000910152565b81810151838201526020016109a2565b6109e36109ec602093610707936109d7815190565b80835293849260200190565b9586910161099f565b601f01601f191690565b9490916103029694610a2d610a4195610a26610a3494610a1f60c08c019860008d019015159052565b60208b0152565b6040890152565b6060870152565b84820360808601526109c2565b9160a08184039101526109c2565b346102cb57610335610a6a610a65366004610397565b61094a565b92610a7a96949692919260405190565b968796876109f6565b346102cb57610a933660046105b3565b6103356000805160206139ee833981519152610325565b346102cb57610aba3660046105b3565b6103c3612462565b346102cb576103c3610ad53660046103f0565b6124ba565b90916040828403126102cb5781356001600160401b0381116102cb5783610b029184016104aa565b92909360208201356001600160401b0381116102cb5761055d92016104aa565b346102cb57610335610325610b38366004610ada565b929190916124ee565b346102cb57610335610603610b573660046102df565b90612590565b346102cb57610335610385610b7336600461061d565b906125db565b8051151582526103029160a0610bcb60c08301610b9b60208601516020860152565b610baa60408601516040860152565b610bb960608601516060860152565b608085015184820360808601526109c2565b9201519060a08184039101526109c2565b602080825261030292910190610b79565b346102cb57610335610c08610c03366004610397565b6126dc565b60405191829182610bdc565b346102cb57610c2c610c27366004610397565b6126fe565b90610335610c3960405190565b928392839015158152901515602082015260400190565b610302916008021c81565b906103029154610c50565b61030260006036610c5b565b346102cb57610c823660046105b3565b610335610325610c66565b6103026000610810565b610302610c8d565b346102cb57610caf3660046105b3565b610335610325610c97565b90610cda610cd3610cc9845190565b8084529260200190565b9260200190565b9060005b818110610ceb5750505090565b909192610d11610d0a60019286516001600160a01b0316815260200190565b9460200190565b929101610cde565b602080825261030292910190610cba565b346102cb57610335610d45610d40366004610397565b61272d565b60405191829182610d19565b90610d5e610727836106eb565b918252565b610d6d6005610d51565b640352e302e360dc1b602082015290565b610302610d63565b610302610d7e565b610302610d86565b6020808252610302929101906109c2565b346102cb57610db73660046105b3565b610335610dc2610d8e565b60405191829182610d96565b610302600060036105d2565b610302906103c8906001600160a01b031682565b61030290610dda565b61030290610dee565b61030590610df7565b6020810192916102dd9190610e00565b346102cb57610e293660046105b3565b610335610e34610dce565b60405191829182610e09565b906020828203126102cb5781356001600160401b0381116102cb576103029201610746565b610707610e7d92602092610e77815190565b94859290565b9384910161099f565b610d5e6107079160209493610e65565b610eab610ea260405190565b92839283610e86565b03902090565b61030291610e96565b610302916008021c61083a565b906103029154610eba565b6000610ee2610302926002610eb1565b610ec7565b346102cb57610335610385610efd366004610e40565b610ed2565b90610f11610cd3610cc9845190565b9060005b818110610f225750505090565b909192610f38610d0a6001928651815260200190565b929101610f15565b602080825261030292910190610f02565b346102cb57610335610f6c610f67366004610397565b6127c9565b60405191829182610f40565b634e487b7160e01b600052603260045260246000fd5b8054821015610fb157610fa8600191600052602060002090565b91020190600090565b610f78565b610fc190603961081d565b80548210156102cb5761030291610fd791610f8e565b90610c5b565b346102cb57610335610325610ff33660046102df565b90610fb6565b346102cb5761033561032561100f366004610397565b6127e5565b346102cb576103c361102736600461061d565b90612817565b346102cb5761103d3660046105b3565b6103356000805160206139ae833981519152610325565b90610827565b600061106a610302926038611054565b610c5b565b346102cb57610335610325611085366004610397565b61105a565b346102cb576103356103856110a0366004610397565b612821565b610302600060016105d2565b346102cb576110c13660046105b3565b6103356106036110a5565b90611104610fd76110fd6110f8846110f36110eb61030289603961081d565b97603a61081d565b611054565b610851565b8094610f8e565b819061110f565b9190565b03611118575090565b6301fb6dd160e01b6000908152600491909152602490fd5b036000fd5b635a05180f60e01b6001600160e01b0319821614908115611154575090565b6103029150612849565b6102dd9061116a612883565b611298565b8015156102c4565b905051906102dd8261116f565b91906040838203126102cb576103029060206111a08286611177565b9401611177565b6040513d6000823e3d90fd5b906020828203126102cb5761030291611177565b6001600160a01b0390911681526040810192916102dd9160200152565b9060ff905b9181191691161790565b9061120361030261120a92151590565b82546111e4565b9055565b805460009392916112216108ae83610871565b916001811690811561090a575060011461123a57505050565b61124d9192939450600052602060002090565b916000925b81841061125f5750500190565b805484840152602090930192600101611252565b604080825261030293919261128a9184019061120e565b91602081840391015261120e565b60389060376112be60026112b86112b26110f88688611054565b8461081d565b01610851565b916112d26112cd6112cd6128d6565b610df7565b604051630d3289cb60e21b8152604081806112f4886004830190815260200190565b0381855afa90811561148a576000916114a6575b5061148f57602061131860405190565b9182906312e8584f60e11b825281806113358933600484016111c7565b03915afa801561148a5761134f9160009161146157501590565b6114485761137b611377600061137161136b6110f8868a611054565b8661081d565b01610840565b1590565b6114305761141561140f6004611408856113e96110f887600561140161136b6110f88f9c6113fb7ffd3c34f2d4fa14871365288f3e4d4aaf9696bef4ae9c3e77452f27025aeea6739f8f6113f56110f885836110f36000806113ef6001996113e96110f8886112b89c611054565b9061081d565b016111f3565b8c61081d565b9d611054565b019b611054565b0192610810565b93610810565b9361142b61142260405190565b92839283611273565b0390a3565b636c445ec960e11b6000908152600491909152602490fd5b63c1b3b1dd60e01b6000908152611130843360046111c7565b611377915060203d602011611483575b61147b81836106b1565b8101906111b3565b503d611471565b6111a7565b635595b91560e11b60009081526004859052602490fd5b6114c8915060403d6040116114ce575b6114c081836106b1565b810190611184565b90611308565b503d6114b6565b6102dd9061115e565b6102dd906114fe6000805160206139ee83398151915261291f565b61291f565b611529565b906001600160a01b03906111e9565b9061152261030261120a92610df7565b8254611503565b6115356102dd91610df7565b6003611512565b6102dd906114de565b6103029060401c61083a565b6103029054611545565b610302905b6001600160401b031690565b610302905461155b565b6115606103026103029290565b906001600160401b03906111e9565b611560610302610302926001600160401b031690565b906115b861030261120a92611592565b8254611583565b9068ff00000000000000009060401b6111e9565b906115e361030261120a92151590565b82546115bf565b61030590611576565b6020810192916102dd91906115ea565b92939091907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0094859261164161163b61137786611551565b9461156c565b9460009661164e88611576565b6001600160401b0388161480611750575b60019761167b61166e8a611576565b916001600160401b031690565b14908161172c575b155b9081611723575b5061171057906116b994939291866116b08a6116a78b611576565b9c019b8c6115a8565b61170157611778565b6116c257505050565b6116f06116fc927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2946115d3565b604051918291826115f3565b0390a1565b61170b888b6115d3565b611778565b63f92ee8a960e01b8852600488fd5b0390fd5b1590503861168c565b905061168561173a30610df7565b3b61174761110b8c610810565b14919050611683565b508561165f565b90600019906111e9565b9061177161030261120a92610810565b8254611757565b9061178594939291612a18565b61178d612a2d565b6102dd61179a6001610810565b6036611761565b906102dd94939291611603565b6102dd906117c96000805160206139ae83398151915261291f565b6117e1906000805160206139ee833981519152612a35565b50565b6102dd906117ae565b906102dd9695949392916117ff612883565b611b65565b903590601e1936829003018212156102cb57018035906001600160401b0382116102cb57602001913682900383136102cb57565b905051906102dd826102c2565b906020828203126102cb5761030291611838565b9160001960089290920291821b911b6111e9565b919061187c61030261120a9390565b908354611859565b90815491680100000000000000008310156106d257826118ac9160016102dd95018155610f8e565b9061186d565b634e487b7160e01b600052601160045260246000fd5b919082039182116118d557565b6118b2565b61030260c06106d7565b610302913691610717565b919061187c61030261120a93610810565b6102dd916000916118ef565b818110611917575050565b806119256000600193611900565b0161190c565b9190601f811161193a57505050565b61194c6102dd93600052602060002090565b906020601f84018190048301931061196e575b6020601f90910104019061190c565b909150819061195f565b90611981815190565b906001600160401b0382116106d2576119a48261199e8554610871565b8561192b565b602090601f83116001146119df5761120a9291600091836119d4575b5050600019600883021c1916906002021790565b0151905038806119c0565b601f198316916119f485600052602060002090565b9260005b818110611a3257509160029391856001969410611a19575b50505002019055565b01516000196008601f8516021c19169055388080611a10565b919360206001819287870151815501950192016119f8565b906102dd91611978565b6005611ad660a06102dd94611a75611a6f6000830151151590565b866111f3565b611a8c611a83602083015190565b60018701611761565b611aa3611a9a604083015190565b60028701611761565b611aba611ab1606083015190565b60038701611761565b611ad1611ac8608083015190565b60048701611a4a565b015190565b9101611a4a565b906102dd91611a54565b9081526040810192916102dd9160200152565b91906109ec81611b11816107079560209181520190565b809561070b565b94929093611b3a6103029795611b4894606089019189830360008b0152611afa565b918683036020880152611afa565b926040818503910152611afa565b60001981146118d55760010190565b92959294869493839285611b798580611804565b9890928a602089019a611b8c8c8b611804565b93611b98979193612ae1565b91611ba292612c43565b611bac8483611804565b9091611bb89084611804565b91611bc2936124ee565b611bce83878388612c7c565b611ef757611bdb81612f97565b611ef757611be881612fc6565b611bf06128d6565b611bfc6112cd82610df7565b6040805163a12c64b560e01b81526004810189905291829060249082905afa801561148a57611c3191600091611ed957501590565b611ec2576112cd611c4191610df7565b92611c4b60405190565b63b8861c2360e01b8152336004820152602081602481885afa90811561148a57600091611e93575b50869003611e7a5781611c8787603961081d565b90611c9191611884565b611c9c86603961081d565b54611ca76001610810565b611cb0916118c8565b82611cbc88603a61081d565b90611cc691611054565b90611cd091611761565b600091611cdd6036610851565b9483850195611cec8787611804565b90611cf78a89611804565b919092611d026118da565b8915158a820152946020860152611d1a8d6040870152565b611d25426060870152565b611d2e916118e4565b6080840152611d3c916118e4565b60a0820152611d4b6036610851565b611d5690603761081d565b90611d6091611add565b611d6a6036610851565b611d75836038611054565b90611d7f91611761565b803b156102cb57878491611db69383611d9760405190565b809681958294611dab637ca6426660e01b90565b845260048401611ae7565b03925af1801561148a577f4a81ae4b6c9fe46a5f956d2d553758fc90f2a44f9145aaeded49124efc4f7e5296611e3594611e0393611dfb93611e4d575b505085611804565b959094611804565b611e22611e1c611e1660369b949b610851565b99610810565b98610810565b98611e2c60405190565b96879687611b18565b0390a36102dd61179a611e486036610851565b611b56565b81611e6c92903d10611e73575b611e6481836106b1565b8101906105b3565b3880611df3565b503d611e5a565b63c1b3b1dd60e01b6000908152611130873360046111c7565b611eb5915060203d602011611ebb575b611ead81836106b1565b810190611845565b38611c73565b503d611ea3565b635595b91560e11b60009081526004879052602490fd5b611ef2915060403d6040116114ce576114c081836106b1565b501590565b505050505050565b906102dd9695949392916117ed565b60016112b861030292611f1f600090565b5060006000805160206139ce8339815191525b01611054565b6102dd90611f536000805160206139ee83398151915261291f565b6102dd90613006565b6102dd90611f38565b906102dd91611f766114f982611f0e565b906117e19161300f565b906102dd91611f65565b90611f94336103c8565b6001600160a01b03821603611fac576117e191612a35565b63334bd91960e11b6000908152600490fd5b610302906103c8565b6103029054611fbe565b611fdb6019610d51565b7f4554484f535f494e544552414354494f4e5f434f4e54524f4c00000000000000602082015290565b610302611fd1565b610302612004565b905051906102dd826103d4565b906020828203126102cb5761030291612014565b61207360206120476112cd6003611fc7565b61204f61200c565b9061205960405190565b9384928391829163d57f7aa360e01b835260048301610d96565b03915afa90811561148a576000916120df575b50612099335b916001600160a01b031690565b036120a6576102dd61210e565b63e2517d3f60e01b60009081526111307f261fea28325784de45eba41a3fbb84c4196fbab02ee802566edfe26616ba5afb3360046111c7565b612101915060203d602011612107575b6120f981836106b1565b810190612021565b38612086565b503d6120ef565b6102dd6130bf565b6102dd612035565b6102dd9061212a612883565b612158565b90916060828403126102cb576103026121488484611177565b9360406111a08260208701611177565b61217361030261216c6110f8846038611054565b603761081d565b9061218060038301610851565b60009061218f61110b83610810565b146122f7576121a060028401610851565b916121af6112cd6112cd6128d6565b6040516312e8584f60e11b8152602081806121ce8833600484016111c7565b0381855afa801561148a576121e99160009161146157501590565b6122dd5760606121f860405190565b633b79ed1960e11b81526004810186905291829060249082905afa90811561148a576000918291906122ab575b5081156122a3575b5061228b57612249916113ef61216c6110f86001946038611054565b7f3a9c110aa9485f987acfe7d0f79ad35d9b6d77338a705c49b505a0e07e73a737600583019261141561140f6122856001600485019401610851565b94610810565b50635595b91560e11b81526004810191909152602490fd5b90503861222d565b90506122cf915060603d6060116122d6575b6122c781836106b1565b81019061212f565b9091612225565b503d6122bd565b63c1b3b1dd60e01b8352828061171f8633600484016111c7565b6301fb6dd160e01b81526004810191909152602490fd5b6102dd9061211e565b906102dd916123246130c7565b906102dd916123328161316f565b613178565b906102dd91612317565b6103029061234d613237565b61237b565b6103027f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610810565b50610302612352565b6103026000612341565b6102dd906123a96000805160206139ee83398151915261291f565b6102dd90613291565b6102dd9061238e565b61030261329a565b6102dd906123de6000805160206139ae83398151915261291f565b6117e1906000805160206139ee83398151915261300f565b6102dd906123c3565b61241160206120476112cd6003611fc7565b03915afa90811561148a5760009161243b575b5061242e3361208c565b036120a6576102dd61245a565b612454915060203d602011612107576120f981836106b1565b38612424565b6102dd613327565b6102dd6123ff565b6102dd906124856000805160206139ae83398151915261291f565b6117e1906000805160206139ae8339815191526124b46124ae6124a86000610810565b83612590565b82612a35565b5061300f565b6102dd9061246a565b92906124e090610302959360408601918683036000880152611afa565b926020818503910152611afa565b929392816124fc565b905090565b61250961110b6000610810565b14801561257b575b6125575761253561254193949561252760405190565b9586946020860194856124c3565b908103825203826106b1565b61255361254c825190565b9160200190565b2090565b61171f858461256560405190565b6356ca8ea960e11b8152948594600486016124c3565b508461258a61110b6000610810565b14612511565b906125cc610302610302936125a3600090565b5060007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000611f32565b613338565b9061082790610df7565b61030291600061260661260c936125f0600090565b50826000805160206139ce833981519152611f32565b016125d1565b610840565b6126196118da565b906000825260208080808080870160008152016000815201600081520160608152016060905250565b610302612611565b906102dd6126cc600561265b6118da565b9461266e61266882610840565b15158752565b61268461267d60018301610851565b6020880152565b61269a61269360028301610851565b6040880152565b6126b06126a960038301610851565b6060880152565b6126c66126bf60048301610929565b6080880152565b01610929565b60a0840152565b6103029061264a565b6126f961216c6110f8610302936126f1612642565b506038611054565b6126d3565b6060611ad16126f961271a93612712600090565b50603761081d565b61272761110b6000610810565b11908190565b61273f610302610302926125a3606090565b61336c565b9061275f612753610cc9845490565b92600052602060002090565b9060005b8181106127705750505090565b90919261279461278d60019261278587610851565b815260200190565b9460010190565b929101612763565b9061030291612744565b906102dd610943926127b760405190565b9384809261279c565b610302906127a6565b6127e0610302916127d8606090565b50603961081d565b6127c0565b6127f7610302610302926125a3600090565b613378565b906102dd9161280d6114f982611f0e565b906117e191612a35565b906102dd916127fc565b60036112b861216c6110f8612838946126f1600090565b61284561110b6000610810565b1190565b637965db0b60e01b6001600160e01b0319821614908115612868575090565b61030291506001600160e01b0319166301ffc9a760e01b1490565b61288b6123bb565b61289157565b63d93c066560e01b6000908152600490fd5b6128ad600d610d51565b6c4554484f535f50524f46494c4560981b602082015290565b6103026128a3565b6103026128c6565b6128f060206128e86112cd6003611fc7565b61204f6128ce565b03915afa90811561148a57600091612906575090565b610302915060203d602011612107576120f981836106b1565b6102dd90339061338e565b906102dd9493929161293a6133bd565b612955565b6103c86103026103029290565b6103029061293f565b9290939160006129648161294c565b6001600160a01b0381166001600160a01b038716149081156129fb575b81156129df575b506129d057506115356129bb936112cd6117e19796946129a7946133ff565b6000805160206139ae83398151915261300f565b506000805160206139ee83398151915261300f565b63d92e233d60e01b8152600490fd5b6001600160a01b031690506001600160a01b0385161438612988565b90506001600160a01b0381166001600160a01b0388161490612981565b906102dd9493929161292a565b6102dd6133bd565b6102dd612a25565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200090612a628184613409565b9283612a6f575b50505090565b612a8592612a809161030291611054565b6134a5565b50388080612a69565b612ad39481989694612ab86103029b9995612ab1612ac596600060a08801970152565b60208c0152565b89830360408b0152611afa565b918683036060880152611afa565b926080818503910152611afa565b939461254196919561253594989398612af8600090565b50604051998a9860208a019889612a8e565b9091610707908390809361070b565b610d5e906020949361070793612b0a565b9091610eab90612b3960405190565b93849384612b19565b909161030292612b2a565b9190612b5e61260c83836002612b42565b612b6b576102dd92612bb6565b63858c8a1f60e01b6000908152600490fd5b612ba96103029593949294612ba2606084019660008501906001600160a01b03169052565b6020830152565b6040818503910152611afa565b91602082829394612bcd6112cd6112cd6001611fc7565b90612bd86000611fc7565b612bfd612be460405190565b96879586948594622ea33360e31b865260048601612b7d565b03915afa801561148a57612c179160009161146157501590565b612c3157612c2c6001916102dd936002612b42565b6111f3565b638baa579f60e01b6000908152600490fd5b906102dd9291612b4d565b92906103029492612c6e611b48926060870190878203600089015261120e565b90858203602087015261120e565b9190612c8a61137782612821565b612f8e5760389060376040612ca86126f96112b26110f88688611054565b0180518614612f8257612cbf6112cd6112cd6128d6565b90612cc960405190565b633b79ed1960e11b815260048101889052606081602481865afa90811561148a5760008080929093612f5a575b50155b918215612f52575b508115612f4a575b50612f33576040516312e8584f60e11b815260208180612d2d8b33600484016111c7565b0381865afa801561148a57612d489160009161146157501590565b612f1a5783612d58612d5d925190565b613521565b612d79866002612d7361136b6110f8888a611054565b01611761565b612d9083612d8b61030289603961081d565b611884565b612dcc612db8612da8612da489603961081d565b5490565b612db26001610810565b906118c8565b612dc7856110f38a603a61081d565b611761565b612de76000611371612de16110f88789611054565b8561081d565b612eff575b803b156102cb576000612dfe60405190565b918290633e53213360e11b8252818381612e1c8c8a60048401611ae7565b03925af1801561148a57612ee9575b50612e368284611054565b612e3f90610851565b612e49908261081d565b600101612e5590610851565b92612e608382611054565b612e6990610851565b612e73908361081d565b60050192612e8091611054565b612e8990610851565b612e929161081d565b60040191612e9f90610810565b93612ea990610810565b94612eb360405190565b938493612ec09385612c4e565b037f6e4fa8ef0805b1c89a3b4d2b316590390b768832487015780d5acf23025e453c91a3600190565b612ef9906000611e6481836106b1565b38612e2b565b612f156000806113ef61136b6110f8888a611054565b612dec565b63c1b3b1dd60e01b6000908152611130883360046111c7565b635595b91560e11b60009081526004889052602490fd5b905038612d09565b915038612d01565b9050612cf99250612f7a915060603d6060116122d6576122c781836106b1565b919092612cf6565b50505050505050600090565b50505050600090565b612fad600061137161216c6110f8856038611054565b15612fc057612fbb906114d5565b600190565b50600090565b612fcf81612821565b612fd65750565b635488184160e11b6000908152600491909152602490fd5b6102dd90612ffb816135aa565b6102dd906000611512565b6102dd90612fee565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320009061303c81846135c4565b92836130485750505090565b612a85926130599161030291611054565b613635565b613066613655565b6102dd6130956000807fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033006113ef565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116fc33610603565b6102dd61305e565b6130d030610df7565b7f0000000000000000000000000000000000000000000000000000000000000000906131046001600160a01b03831661208c565b14908115613126575b5061311457565b63703e46dd60e11b6000908152600490fd5b905061314361208c613136613678565b926001600160a01b031690565b14153861310d565b6102dd906131666000805160206139ae83398151915261291f565b6102dd906135aa565b6102dd9061314b565b906131856112cd83610df7565b90602061319160405190565b6352d1902d60e01b815292839060049082905afa60009281613216575b506131e057505060016131be5750565b634c9c8ce360e01b60009081526001600160a01b039091166004526024036000fd5b9092916131ee610302612352565b84036131ff576102dd92935061368e565b632a87526960e21b60009081526004859052602490fd5b61323091935060203d602011611ebb57611ead81836106b1565b91386131ae565b61324030610df7565b6132726001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661208c565b0361311457565b6102dd90613286816135aa565b6102dd906001611512565b6102dd90613279565b61030260007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300611371565b6132cd612883565b6102dd6132fd600160007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033006113ef565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116fc33610603565b6102dd6132c5565b61030290610810565b61336261335d61030293613358600061336795613353600090565b500190565b6136f7565b61332f565b61293f565b610dee565b6060906124f790613710565b613389600061030292613353600090565b613725565b9061339c61137782846125db565b6133a4575050565b63e2517d3f60e01b6000908152916111309160046111c7565b6133c8611377613739565b6133ce57565b631afcd79f60e31b6000908152600490fd5b906102dd916133ed6133bd565b906133fa6102dd92613006565b613291565b906102dd916133e0565b6000805160206139ce83398151915261342283836125db565b1561348b576000612c2c8482612606868261343d9701611054565b61345761345161344b339390565b93610df7565b91610df7565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b61348260405190565b600090a4600190565b505050600090565b6103029081906001600160a01b031681565b906134d261110b6134cd6134c86000610302966134c0600090565b500194610dee565b613493565b610810565b613762565b634e487b7160e01b600052603160045260246000fd5b6102dd9160009161186d565b8054801561351c5760001901906135196135138383610f8e565b906134ed565b55565b6134d7565b906135a56102dd926118ac61359f6110f861354061030285603961081d565b956110f3613571610fd76135998a612da88a612dc761355d845490565b93613593610fd76135796135718d876110cc565b95603a61081d565b9261358d6135876001610810565b896118c8565b90610f8e565b90611054565b8a610f8e565b84610f8e565b6134f9565b6000906135bc61208c6103c88461294c565b146129d05750565b6000805160206139ce8339815191526135e061137784846125db565b1561348b576001612c2c84600061260686826135fc9701611054565b61360a61345161344b339390565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d61348260405190565b9061365061110b6134cd6134c86000610302966134c0600090565b613808565b6136606113776123bb565b61366657565b638dfc202b60e01b6000908152600490fd5b6103026000613688610302612352565b01611fc7565b9061369882613840565b6136a182610df7565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6136cb60405190565b600090a280516136de61110b6000610810565b11156136ed576117e1916138cd565b50506102dd61388b565b610302916000610fd792613709600090565b5001610f8e565b60006103029161371e606090565b50016127c0565b600061030291613733600090565b50015490565b6103027ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611551565b906137736110f88260018501611054565b61377d6000610810565b811461348b576137d0610302926000926135a595611f3260019788936137ab6137a586610810565b826118c8565b888501916137c36137ba845490565b612db289610810565b8083036137d55750505090565b611900565b6118ac6137f8613800946137ef610fd7612dc79589610f8e565b92839188610f8e565b888801611054565b388080612a69565b61381561137783836138f4565b1561383957612fbb91612dc790600161383284612da48482611884565b9301611054565b5050600090565b6000813b61385061110b83610810565b1461386b57906102dd91613865610302612352565b01611512565b634c9c8ce360e01b81526001600160a01b03919091166004820152602490fd5b600061389681610810565b341161389f5750565b63b398979f60e01b8152600490fd5b3d156138c8576138bd3d610d51565b903d6000602084013e565b606090565b600080610302936138dc606090565b50602081519101845af46138ee6138ae565b9161391f565b61390d9160016110f892613906600090565b5001611054565b61391a61110b6000610810565b141590565b9061392a575061397e565b81519060009161393c61110b84610810565b1480613969575b61394c57505090565b639996b31560e01b82526001600160a01b03166004820152602490fd5b50803b61397861110b84610810565b14613943565b805160009061398f61110b83610810565b111561399e5750805190602001fd5b63d6bda27560e01b8152600490fdfeb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122078cf95f0e82f9e06651027df987a74570d9fc0d9970d9127bd4a5343d0aa753764736f6c634300081a0033