@excubiae/contracts
Version:
1,000 lines • 117 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "SemaphorePolicyTest",
"sourceName": "contracts/test/extensions/Semaphore.t.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "subject",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "guarded",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "evidence",
"type": "bytes"
}
],
"name": "Enforced",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "guarded",
"type": "address"
}
],
"name": "TargetSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "log",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "log_address",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256[]",
"name": "val",
"type": "uint256[]"
}
],
"name": "log_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "int256[]",
"name": "val",
"type": "int256[]"
}
],
"name": "log_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address[]",
"name": "val",
"type": "address[]"
}
],
"name": "log_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "log_bytes",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "log_bytes32",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"name": "log_int",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "address",
"name": "val",
"type": "address"
}
],
"name": "log_named_address",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "val",
"type": "uint256[]"
}
],
"name": "log_named_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "int256[]",
"name": "val",
"type": "int256[]"
}
],
"name": "log_named_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "address[]",
"name": "val",
"type": "address[]"
}
],
"name": "log_named_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes",
"name": "val",
"type": "bytes"
}
],
"name": "log_named_bytes",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "val",
"type": "bytes32"
}
],
"name": "log_named_bytes32",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "int256",
"name": "val",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "decimals",
"type": "uint256"
}
],
"name": "log_named_decimal_int",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "val",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "decimals",
"type": "uint256"
}
],
"name": "log_named_decimal_uint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "int256",
"name": "val",
"type": "int256"
}
],
"name": "log_named_int",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "val",
"type": "string"
}
],
"name": "log_named_string",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "val",
"type": "uint256"
}
],
"name": "log_named_uint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "log_string",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "log_uint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "logs",
"type": "event"
},
{
"inputs": [],
"name": "IS_TEST",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deployer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeArtifacts",
"outputs": [
{
"internalType": "string[]",
"name": "excludedArtifacts_",
"type": "string[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeContracts",
"outputs": [
{
"internalType": "address[]",
"name": "excludedContracts_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeSelectors",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "bytes4[]",
"name": "selectors",
"type": "bytes4[]"
}
],
"internalType": "struct StdInvariant.FuzzSelector[]",
"name": "excludedSelectors_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeSenders",
"outputs": [
{
"internalType": "address[]",
"name": "excludedSenders_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "failed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "guarded",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "invalidEvidence",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "invalidGroupId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "invalidGroupIdEvidence",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "invalidGroupIdProof",
"outputs": [
{
"internalType": "uint256",
"name": "merkleTreeDepth",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "merkleTreeRoot",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nullifier",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "message",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "scope",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "invalidProof",
"outputs": [
{
"internalType": "uint256",
"name": "merkleTreeDepth",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "merkleTreeRoot",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nullifier",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "message",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "scope",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "invalidProverEvidence",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "invalidProverProof",
"outputs": [
{
"internalType": "uint256",
"name": "merkleTreeDepth",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "merkleTreeRoot",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nullifier",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "message",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "scope",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "notOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "notSubject",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "setUp",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "subject",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetArtifactSelectors",
"outputs": [
{
"components": [
{
"internalType": "string",
"name": "artifact",
"type": "string"
},
{
"internalType": "bytes4[]",
"name": "selectors",
"type": "bytes4[]"
}
],
"internalType": "struct StdInvariant.FuzzArtifactSelector[]",
"name": "targetedArtifactSelectors_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetArtifacts",
"outputs": [
{
"internalType": "string[]",
"name": "targetedArtifacts_",
"type": "string[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetContracts",
"outputs": [
{
"internalType": "address[]",
"name": "targetedContracts_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetInterfaces",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "string[]",
"name": "artifacts",
"type": "string[]"
}
],
"internalType": "struct StdInvariant.FuzzInterface[]",
"name": "targetedInterfaces_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSelectors",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "bytes4[]",
"name": "selectors",
"type": "bytes4[]"
}
],
"internalType": "struct StdInvariant.FuzzSelector[]",
"name": "targetedSelectors_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSenders",
"outputs": [
{
"internalType": "address[]",
"name": "targetedSenders_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_factory_deployAndInitialize",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_policyCheckerMockks_enforce_whenCheckFails_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforce_whenAlreadyEnforced_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforce_whenInvalidProof_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforce_whenScopeGroupIdIncorrect_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforce_whenScopeProverIncorrect_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforce_whenValid_succeeds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_getAppendedBytes",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenAlreadySet_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenCallerNotOwner_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenValidAddress_succeeds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenZeroAddress_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_target_returnsExpectedAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_trait_returnsCorrectValue",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_whenAlreadyInitialized_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "validEvidence",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "validGroupId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "validProof",
"outputs": [
{
"internalType": "uint256",
"name": "merkleTreeDepth",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "merkleTreeRoot",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nullifier",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "message",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "scope",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040819052600c8054600160ff199182168117909255601f8054909116821790556001625e79b760e01b031990915260845260008051602061619683398151915263ffa1864960a4602060405180830381865afa158015610066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061008a91906106d8565b602680546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b03198152600260048201526000805160206161968339815191529063ffa1864990602401602060405180830381865afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906106d8565b602780546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b03198152600360048201526000805160206161968339815191529063ffa1864990602401602060405180830381865afa158015610188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ac91906106d8565b602880546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b031981526004808201526000805160206161968339815191529063ffa1864990602401602060405180830381865afa158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c91906106d8565b602980546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b03198152600560048201526000805160206161968339815191529063ffa1864990602401602060405180830381865afa1580156102a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102cd91906106d8565b602a80546001600160a01b0319166001600160a01b03929092169190911790556000602b8190556001602c8190556040805160c0808201835292815260208082018581528284018681526060808501888152602854821b6001600160601b0319166080808801918252885161010081018a528b81529687018b90529786018a905291850189905295840188905260a080850189905296840188905260e08401979097529483018290528251602d9081559051602e559351602f559151603055925160315561039f906032906008610685565b50506040805160c0808201835260018252600060208084018281528486018381526060808701858152602b54602a54831b6001600160601b031916176080808a019182528a5161010081018c5288815296870188905299860187905291850186905297840185905260a080850186905295840185905260e08401949094529385018290528451603a9081559051603b559251603c559351603d5551603e559092509061044f90603f906008610685565b50506040805160c0808201835260018252600060208084018281528486018381526060808701858152602c54602854831b6001600160601b031916176080808a019182528a5161010081018c5288815296870188905299860187905291850186905297840185905260a080850186905295840185905260e084019490945293850182905284516047908155905160485592516049559351604a5551604b55909250906104ff90604c906008610685565b50506040805160c080820183526001808352600060208085018281528587018481526060808801858152602b54602854831b6001600160601b031916176080808b019182528b5161010081018d5298895295880187905299870186905290860185905292850184905260a080860185905295850184905260e08501939093529385018390528451605490815593516055559051605655516057559251605855909250906105b0906059906008610685565b505050602d6040516020016105c59190610708565b604051602081830303815290604052606190816105e2919061080b565b50603a6040516020016105f59190610708565b60405160208183030381529060405260629081610612919061080b565b5060476040516020016106259190610708565b60405160208183030381529060405260639081610642919061080b565b5060546040516020016106559190610708565b60405160208183030381529060405260649081610672919061080b565b5034801561067f57600080fd5b506108c9565b82600881019282156106b3579160200282015b828111156106b3578251825591602001919060010190610698565b506106bf9291506106c3565b5090565b5b808211156106bf57600081556001016106c4565b6000602082840312156106ea57600080fd5b81516001600160a01b038116811461070157600080fd5b9392505050565b81548152600182015460208201526002820154604082015260038201546060820152600482015460808201526101a0810160a082016005840160005b6008811015610763578154835260209092019160019182019101610744565b50505092915050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061079657607f821691505b6020821081036107b657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561080657806000526020600020601f840160051c810160208510156107e35750805b601f840160051c820191505b8181101561080357600081556001016107ef565b50505b505050565b81516001600160401b038111156108245761082461076c565b610838816108328454610782565b846107bc565b6020601f82116001811461086c57600083156108545750848201515b600019600385901b1c1916600184901b178455610803565b600084815260208120601f198516915b8281101561089c578785015182556020948501946001909201910161087c565b50848210156108ba5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6158be806108d86000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638498417c11610151578063cee617b4116100c3578063e20c9f7111610087578063e20c9f71146104ca578063e5f05d70146104d2578063e6a8775d146104da578063eb5579d6146104e2578063f661a689146104ea578063fa7626d4146104f257600080fd5b8063cee617b41461047a578063d25a8bd714610494578063d5f394881461049c578063d81a6959146104af578063db5b7a51146104c257600080fd5b80639fa5dc80116101155780639fa5dc8014610428578063a2c8490e14610430578063b0464fdc1461044a578063b5508aa914610452578063ba414fa61461045a578063c7e76f911461047257600080fd5b80638498417c146103e657806385226c81146103ee57806389d8bda914610403578063916a17c61461040b57806399ccfc421461042057600080fd5b80633e5e3c23116101ea57806366d9a9a0116101ae57806366d9a9a01461039d57806372f7a030146103b25780637468b87f146103c557806376548b75146103cd5780637bb29ca9146103d557806383a323c5146103de57600080fd5b80633e5e3c23146103665780633f7286f41461036e5780634e693a6314610376578063536c82ed1461037e578063629fe4241461038657600080fd5b80630b584c4a116102315780630b584c4a146103075780631ed7831c1461030f578063251c9d63146103245780632ade38801461033757806332756e331461034c57600080fd5b80630187ba5c1461026e57806307a86e85146102b557806307bfb8c5146102ca5780630a59a98c146102d45780630a9254e4146102ff575b600080fd5b605454605554605654605754605854610288949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6102bd6104ff565b6040516102ac9190613109565b6102d261058d565b005b6028546102e7906001600160a01b031681565b6040516001600160a01b0390911681526020016102ac565b6102d261087e565b6102d26110dc565b610317611336565b6040516102ac9190613123565b6029546102e7906001600160a01b031681565b61033f611398565b6040516102ac919061316f565b604754604854604954604a54604b54610288949392919085565b6103176114da565b61031761153a565b6102d261159a565b6102d26116bd565b61038f602c5481565b6040519081526020016102ac565b6103a5611a42565b6040516102ac9190613281565b6027546102e7906001600160a01b031681565b6102d2611baf565b6102d2611e43565b61038f602b5481565b6102bd611fe6565b6102bd611ff3565b6103f6612000565b6040516102ac9190613301565b6102d26120d0565b61041361216c565b6040516102ac919061335a565b6102d2612252565b6102d261239d565b603a54603b54603c54603d54603e54610288949392919085565b6104136125f7565b6103f66126dd565b6104626127ad565b60405190151581526020016102ac565b6102d261284b565b602d54602e54602f54603054603154610288949392919085565b6102d2612990565b6026546102e7906001600160a01b031681565b602a546102e7906001600160a01b031681565b6102d2612a3c565b610317612b5d565b6102d2612bbd565b6102d2612c95565b6102d2612eef565b6102bd612f65565b601f546104629060ff1681565b6062805461050c906133d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906133d3565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b505050505081565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b50506024805460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116935063776d1a01925001600060405180830381600087803b15801561064057600080fd5b505af1158015610654573d6000803e3d6000fd5b5050505060008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a457600080fd5b505af11580156106b8573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061584983398151915292506306447d569150602401600060405180830381600087803b15801561070f57600080fd5b505af1158015610723573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316634715494560e01b179052915163f28dceb360e01b8152600080516020615849833981519152945063f28dceb3935061077c9201613109565b600060405180830381600087803b15801561079657600080fd5b505af11580156107aa573d6000803e3d6000fd5b5050602454602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906061906004016134b0565b600060405180830381600087803b15801561080057600080fd5b505af1158015610814573d6000803e3d6000fd5b5050505060008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b50505050565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5060009250600191506108f59050565b60405190808252806020026020018201604052801561091e578160200160208202803683370190505b506040805160028082526060820183529293506000929091602083019080368337505060408051600280825260608201835293945060009390925090602083019080368337019050509050602b548360008151811061097f5761097f6134f2565b602002602001018181525050602d60020154826000815181106109a4576109a46134f2565b602002602001018181525050605460020154826001815181106109c9576109c96134f2565b6020026020010181815250506001816000815181106109ea576109ea6134f2565b602002602001019015159081151581525050600081600181518110610a1157610a116134f2565b602002602001019015159081151581525050828282604051610a3290613085565b610a3e9392919061353a565b604051809103906000f080158015610a5a573d6000803e3d6000fd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550604051610a8d90613092565b604051809103906000f080158015610aa9573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b0392909216919091179055604051610ad69061309f565b604051809103906000f080158015610af2573d6000803e3d6000fd5b50602280546001600160a01b0319166001600160a01b0392909216919091179055604051610b1f906130ac565b604051809103906000f080158015610b3b573d6000803e3d6000fd5b50602560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060008051602061586983398151915260001c6001600160a01b03166341af2f526040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b5050602254601f54602b546040516304956eaf60e41b81526001600160a01b0361010090930483166004820152602481019190915291169250634956eaf091506044016020604051808303816000875af1158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906135c3565b50600060008051602061586983398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc491908101906136cf565b9050600081600081518110610cdb57610cdb6134f2565b602002602001015160000151600181518110610cf957610cf96134f2565b6020908102919091010151602180546001600160a01b0319166001600160a01b038316179055604080516320d797a960e11b81529051919250600080516020615849833981519152916341af2f529160048082019260009290919082900301818387803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b5050602554602154604051634c96a38960e01b81526001600160a01b03918216600482015291169250634c96a38991506024016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df391906135c3565b5060008051602061586983398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610e45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e6d91908101906136cf565b9150600082600081518110610e8457610e846134f2565b602002602001015160000151600181518110610ea257610ea26134f2565b6020908102919091010151602380546001600160a01b0319166001600160a01b038316179055604080516320d797a960e11b81529051919250600080516020615849833981519152916341af2f529160048082019260009290919082900301818387803b158015610f1257600080fd5b505af1158015610f26573d6000803e3d6000fd5b5050602554602054604051634c96a38960e01b81526001600160a01b03918216600482015291169250634c96a38991506024016020604051808303816000875af1158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c91906135c3565b5060008051602061586983398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610fee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101691908101906136cf565b925060008360008151811061102d5761102d6134f2565b60200260200101516000015160018151811061104b5761104b6134f2565b6020908102919091010151602480546001600160a01b0319166001600160a01b038316179055604080516390c5013b60e01b81529051919250600080516020615849833981519152916390c5013b9160048082019260009290919082900301818387803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050505050565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b15801561112f57600080fd5b505af1158015611143573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b5050505060008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111f457600080fd5b505af1158015611208573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061584983398151915292506306447d569150602401600060405180830381600087803b15801561125f57600080fd5b505af1158015611273573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663036c503960e61b179052915163f28dceb360e01b8152600080516020615849833981519152945063f28dceb393506112cc9201613109565b600060405180830381600087803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b5050602354602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906063906004016134b0565b6060601680548060200260200160405190810160405280929190818152602001828054801561138e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611370575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156114d157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114ba57838290600052602060002001805461142d906133d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611459906133d3565b80156114a65780601f1061147b576101008083540402835291602001916114a6565b820191906000526020600020905b81548152906001019060200180831161148957829003601f168201915b50505050508152602001906001019061140e565b5050505081525050815260200190600101906113bc565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561138e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611370575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561138e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611370575050505050905090565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663d92e233d60e01b179052915163f28dceb360e01b8152600080516020615849833981519152945063f28dceb3935061165a9201613109565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b505060235460405163776d1a0160e01b8152600060048201526001600160a01b03909116925063776d1a0191506024016107e6565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b15801561171057600080fd5b505af1158015611724573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561177157600080fd5b505af1158015611785573d6000803e3d6000fd5b5050505060008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061584983398151915292506306447d569150602401600060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b505060405163248e63e160e11b815260016004820181905260248201819052604482018190526064820152600080516020615849833981519152925063491cc7c29150608401600060405180830381600087803b1580156118b457600080fd5b505af11580156118c8573d6000803e3d6000fd5b50506027546028546040516001600160a01b039283169450911691507fc013b39287cb7a53f776482ac9573829321f002f31ef8782129b41d60047bda09061191290606190613860565b60405180910390a3602354602854604051631e898ef160e01b81526001600160a01b0392831692631e898ef192611951929116906061906004016134b0565b600060405180830381600087803b15801561196b57600080fd5b505af115801561197f573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316633440c93360e21b179052915163f28dceb360e01b8152600080516020615849833981519152945063f28dceb393506119d89201613109565b600060405180830381600087803b1580156119f257600080fd5b505af1158015611a06573d6000803e3d6000fd5b5050602354602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906061906004016134b0565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114d15783829060005260206000209060020201604051806040016040529081600082018054611a99906133d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac5906133d3565b8015611b125780601f10611ae757610100808354040283529160200191611b12565b820191906000526020600020905b815481529060010190602001808311611af557829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b9757602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411611b595790505b50505050508152505081526020019060010190611a66565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b158015611c0257600080fd5b505af1158015611c16573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b5050505060008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cc757600080fd5b505af1158015611cdb573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061584983398151915292506306447d569150602401600060405180830381600087803b158015611d3257600080fd5b505af1158015611d46573d6000803e3d6000fd5b505060405163248e63e160e11b815260016004820181905260248201819052604482018190526064820152600080516020615849833981519152925063491cc7c29150608401600060405180830381600087803b158015611da657600080fd5b505af1158015611dba573d6000803e3d6000fd5b50506027546028546040516001600160a01b039283169450911691507fc013b39287cb7a53f776482ac9573829321f002f31ef8782129b41d60047bda090611e0490606190613860565b60405180910390a3602354602854604051631e898ef160e01b81526001600160a01b0392831692631e898ef1926107e6929116906061906004016134b0565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b50505050611f9a602360009054906101000a90046001600160a01b03166001600160a01b03166372f7a0306040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8991906135c3565b6027546001600160a01b0316612f72565b60008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086457600080fd5b6064805461050c906133d3565b6063805461050c906133d3565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114d1578382906000526020600020018054612043906133d3565b80601f016020809104026020016040519081016040528092919081815260200182805461206f906133d3565b80156120bc5780601f10612091576101008083540402835291602001916120bc565b820191906000526020600020905b81548152906001019060200180831161209f57829003601f168201915b505050505081526020019060010190612024565b6023546040805163ce343deb60e01b8152905161216a926001600160a01b03169163ce343deb9160048083019260009291908290030181865afa15801561211b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121439190810190613873565b6040518060400160405280600981526020016853656d6170686f726560b81b815250612fe4565b565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114d15760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561223a57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116121fc5790505b50505050508152505081526020019060010190612190565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b1580156122a557600080fd5b505af11580156122b9573d6000803e3d6000fd5b505060405163248e63e160e11b815260016004820181905260248201819052604482018190526064820152600080516020615849833981519152925063491cc7c29150608401600060405180830381600087803b15801561231957600080fd5b505af115801561232d573d6000803e3d6000fd5b50506027546040516001600160a01b0390911692507f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a1969150600090a260235460275460405163776d1a0160e01b81526001600160a01b03918216600482015291169063776d1a01906024016107e6565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b1580156123f057600080fd5b505af1158015612404573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b5050505060008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124b557600080fd5b505af11580156124c9573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061584983398151915292506306447d569150602401600060405180830381600087803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316635945f53b60e01b179052915163f28dceb360e01b8152600080516020615849833981519152945063f28dceb3935061258d9201613109565b600060405180830381600087803b1580156125a757600080fd5b505af11580156125bb573d6000803e3d6000fd5b5050602354602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906062906004016134b0565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114d15760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156126c557602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116126875790505b5050505050815250508152602001906001019061261b565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114d1578382906000526020600020018054612720906133d3565b80601f016020809104026020016040519081016040528092919081815260200182805461274c906133d3565b80156127995780601f1061276e57610100808354040283529160200191612799565b820191906000526020600020905b81548152906001019060200180831161277c57829003601f168201915b505050505081526020019060010190612701565b60085460009060ff16156127c5575060085460ff1690565b604051630667f9d760e41b8152600080516020615849833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015612820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284491906138bc565b1415905090565b6029546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b15801561289e57600080fd5b505af11580156128b2573d6000803e3d6000fd5b5050602954604080516001600160a01b0390921660248084019190915281518084039091018152604490920181526020820180516001600160e01b031663118cdaa760e01b1790525163f28dceb360e01b8152600080516020615849833981519152935063f28dceb3925061292a9190600401613109565b600060405180830381600087803b15801561294457600080fd5b505af1158015612958573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a0191506024016107e6565b6023546040805163b41a4b1960e01b8152905161216a926001600160a01b03169163b41a4b199160048083019260009291908290030181865afa1580156129db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a0391908101906138d5565b602654602154604080516001600160a01b0393841660208201529290911690820152606001604051602081830303815290604052613017565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b158015612a8f57600080fd5b505af1158015612aa3573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015612af057600080fd5b505af1158015612b04573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663e0f2d7b160e01b179052915163f28dceb360e01b8152600080516020615849833981519152945063f28dceb3935061292a9201613109565b6060601580548060200260200160405190810160405280929190818152602001828054801561138e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611370575050505050905090565b6040805160048082526024820183526020820180516001600160e01b031662dc149f60e41b179052915163f28dceb360e01b81526000805160206158498339815191529263f28dceb392612c1392909101613109565b600060405180830381600087803b158015612c2d57600080fd5b505af1158015612c41573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086457600080fd5b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615849833981519152906306447d5690602401600060405180830381600087803b158015612ce857600080fd5b505af1158015612cfc573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015612d4957600080fd5b505af1158015612d5d573d6000803e3d6000fd5b5050505060008051602061586983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612dad57600080fd5b505af1158015612dc1573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061584983398151915292506306447d569150602401600060405180830381600087803b158015612e1857600080fd5b505af1158015612e2c573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b03166309bde33960e01b179052915163f28dceb360e01b8152600080516020615849833981519152945063f28dceb39350612e859201613109565b600060405180830381600087803b158015612e9f57600080fd5b