{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenBridgeTest",
  "sourceName": "contracts/test/TokenBridgeTest.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_validators",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_cycleEnd",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_requiredValidators",
          "type": "address[]"
        },
        {
          "internalType": "uint32",
          "name": "_consensusRatio",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_bridgedToken",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenBridge.BridgeFees",
          "name": "_fees",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "dailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accountDailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "onlyWhitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct TokenBridge.BridgeLimits",
          "name": "_limits",
          "type": "tuple"
        },
        {
          "internalType": "contract IFaucet",
          "name": "_faucet",
          "type": "address"
        },
        {
          "internalType": "contract INameService",
          "name": "_nameService",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_chainIdOverride",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "blockHash",
          "type": "bytes32"
        }
      ],
      "name": "BlockVerified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "withRelay",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "BridgeRequest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceChainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceBlockNumber",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ExecutedTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "validators",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cycleEnd",
          "type": "uint256"
        }
      ],
      "name": "ValidatorsSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BRIDGE_TOPIC",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountsDailyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastTransferReset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bridged24Hours",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeDailyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastTransferReset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bridged24Hours",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "minFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "dailyLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accountDailyLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "onlyWhitelisted",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "bridgeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "bridgeToWithoutRelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgedToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "canBridge",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isWithinLimit",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "error",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "chainIdToStats",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "totalBridged",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "totalRelayFees",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "totalBridgeFees",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "chainStartBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bridgeStartBlock",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "chainVerifiedBlocks",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "closeBridge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "consensusRatio",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "currentValidators",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "expectedRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "key",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes[]",
                  "name": "proof",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint256",
                  "name": "keyIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "proofIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "expectedValue",
                  "type": "bytes"
                }
              ],
              "internalType": "struct MPT.MerkleProof[]",
              "name": "receiptProofs",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "blockHeaderRlp",
              "type": "bytes"
            },
            {
              "internalType": "uint256",
              "name": "blockNumber",
              "type": "uint256"
            }
          ],
          "internalType": "struct BridgeCore.BlockReceiptProofs[]",
          "name": "blocks",
          "type": "tuple[]"
        }
      ],
      "name": "executeReceipts",
      "outputs": [
        {
          "internalType": "string[][]",
          "name": "results",
          "type": "string[][]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "executedRequests",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "faucet",
      "outputs": [
        {
          "internalType": "contract IFaucet",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_validators",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_cycleEnd",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_requiredValidators",
          "type": "address[]"
        },
        {
          "internalType": "uint32",
          "name": "_consensusRatio",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_bridgedToken",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenBridge.BridgeFees",
          "name": "_fees",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "dailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accountDailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "onlyWhitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct TokenBridge.BridgeLimits",
          "name": "_limits",
          "type": "tuple"
        },
        {
          "internalType": "contract IFaucet",
          "name": "_faucet",
          "type": "address"
        },
        {
          "internalType": "contract INameService",
          "name": "_nameService",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isClosed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "signers",
          "type": "address[]"
        }
      ],
      "name": "isValidConsensus",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isValid",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nameService",
      "outputs": [
        {
          "internalType": "contract INameService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "normalizeFrom18ToTokenDecimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "normalized",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "normalizeFromTokenTo18Decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "normalized",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numRequiredValidators",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numValidators",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "onTokenTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "requiredValidators",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requiredValidatorsSet",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenBridge.BridgeFees",
          "name": "_fees",
          "type": "tuple"
        }
      ],
      "name": "setBridgeFees",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "dailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accountDailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "onlyWhitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct TokenBridge.BridgeLimits",
          "name": "_limits",
          "type": "tuple"
        }
      ],
      "name": "setBridgeLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_consensusRatio",
          "type": "uint32"
        }
      ],
      "name": "setConsensusRatio",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IFaucet",
          "name": "_faucet",
          "type": "address"
        }
      ],
      "name": "setFaucet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "validators",
          "type": "address[]"
        }
      ],
      "name": "setRequiredValidators",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "bridges",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "blockstart",
          "type": "uint256[]"
        }
      ],
      "name": "setSourceBridges",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "sourceBridgeToBlockstart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "rlpHeader",
              "type": "bytes"
            },
            {
              "internalType": "bytes[]",
              "name": "signatures",
              "type": "bytes[]"
            },
            {
              "internalType": "uint256",
              "name": "cycleEnd",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "validators",
              "type": "address[]"
            }
          ],
          "internalType": "struct BridgeCore.SignedBlock[]",
          "name": "signedBlocks",
          "type": "tuple[]"
        }
      ],
      "name": "submitBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "rlpHeader",
              "type": "bytes"
            },
            {
              "internalType": "bytes[]",
              "name": "signatures",
              "type": "bytes[]"
            },
            {
              "internalType": "uint256",
              "name": "cycleEnd",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "validators",
              "type": "address[]"
            }
          ],
          "internalType": "struct BridgeCore.SignedBlock",
          "name": "blockData",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "signedBlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "parentRlpHeaders",
          "type": "bytes[]"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "expectedRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "key",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes[]",
                  "name": "proof",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint256",
                  "name": "keyIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "proofIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "expectedValue",
                  "type": "bytes"
                }
              ],
              "internalType": "struct MPT.MerkleProof[]",
              "name": "receiptProofs",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "blockHeaderRlp",
              "type": "bytes"
            },
            {
              "internalType": "uint256",
              "name": "blockNumber",
              "type": "uint256"
            }
          ],
          "internalType": "struct BridgeCore.BlockReceiptProofs[]",
          "name": "txs",
          "type": "tuple[]"
        }
      ],
      "name": "submitChainBlockParentsAndTxs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "usedReceipts",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "validatorsCycleEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "childBlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "parentRlpHeaders",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes",
          "name": "childRlpHeader",
          "type": "bytes"
        }
      ],
      "name": "verifyParentBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506040516200642e3803806200642e833981016040819052620000389162000685565b6200004b8a8a8a8a8a8a8a8a8a6200005f565b61010455506200080b975050505050505050565b601554610100900460ff1615808015620000805750601554600160ff909116105b80620000b057506200009d306200022560201b6200241a1760201c565b158015620000b0575060155460ff166001145b620001195760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6015805460ff1916600117905580156200013d576015805461ff0019166101001790555b6200014b8a8a8a8a62000234565b60f380546001600160a01b03199081166001600160a01b0389811691909117909255865160f65560208088015160f75560408089015160f855875160f9559087015160fa5586015160fb55606086015160fc55608086015160fd805460ff1916911515919091179055610101805482168684161790556101028054909116918416919091179055801562000219576015805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b6200023e6200027f565b6200024a8484620002f9565b6200025582620003ad565b60e0805463ffffffff9092166401000000000263ffffffff60201b19909216919091179055505050565b601554610100900460ff16620002ec5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000110565b620002f7336200044c565b565b60005b82518110156200036257816001600085848151811062000320576200032062000778565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808062000359906200078e565b915050620002fc565b50600481905581516003556040517f27330b21e104b5b4f17c1f89b946c154b973ab51773ac9debf76b53bb57a194790620003a19084908490620007b8565b60405180910390a15050565b60de8054906000620003bf836200078e565b919050555060005b81518110156200042f5760de5460df6000848481518110620003ed57620003ed62000778565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808062000426906200078e565b915050620003c7565b505160e0805463ffffffff191663ffffffff909216919091179055565b60ac80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620004ca57600080fd5b50565b8051620004da81620004b4565b919050565b600082601f830112620004f157600080fd5b815160206001600160401b03808311156200051057620005106200049e565b8260051b604051601f19603f830116810181811084821117156200053857620005386200049e565b6040529384528581018301938381019250878511156200055757600080fd5b83870191505b84821015620005835781516200057381620004b4565b835291830191908301906200055d565b979650505050505050565b805163ffffffff81168114620004da57600080fd5b600060608284031215620005b657600080fd5b604051606081016001600160401b0381118282101715620005db57620005db6200049e565b80604052508091508251815260208301516020820152604083015160408201525092915050565b600060a082840312156200061557600080fd5b60405160a081016001600160401b03811182821017156200063a576200063a6200049e565b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015180151581146200067857600080fd5b6080919091015292915050565b6000806000806000806000806000806102008b8d031215620006a657600080fd5b8a516001600160401b0380821115620006be57600080fd5b620006cc8e838f01620004df565b9b5060208d01519a5060408d0151915080821115620006ea57600080fd5b50620006f98d828e01620004df565b9850506200070a60608c016200058e565b96506200071a60808c01620004cd565b95506200072b8c60a08d01620005a3565b94506200073d8c6101008d0162000602565b93506200074e6101a08c01620004cd565b92506200075f6101c08c01620004cd565b91506101e08b015190509295989b9194979a5092959850565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620007b157634e487b7160e01b600052601160045260246000fd5b5060010190565b604080825283519082018190526000906020906060840190828701845b82811015620007fc5781516001600160a01b031684529284019290840190600101620007d5565b50505092019290925292915050565b608051615beb6200084360003960008181610fac01528181610fec01528181611583015281816115c3015261163f0152615beb6000f3fe60806040526004361061022e5760003560e01c8063183d4c8f146102335780632784b2381461025557806329b70872146102885780633095634a146102a85780633659cfe6146102d6578063370a4250146102f65780633811da501461030c5780633886d21e146103395780633cca046d1461036b5780633e6326fc14610398578063425cfb53146103c65780634406acdd146104065780634c83f9e4146104335780634f1ef2861461045757806352d1902d1461046a5780635c8430601461047f5780635d593f8d1461049f578063715018a6146104b55780637b0240c0146104ca57806382dc737d146104f85780638da5cb5b14610518578063930af3541461052d57806394cb97991461054d578063a4c0ed361461056d578063a8b8be181461058d578063a976acf3146105ad578063a9c4b87e146105cd578063af17773c146105ee578063b1228a6314610663578063b2f7667f14610683578063be58d44d146106b3578063c2b6b58c146106e3578063c3e6978f146106fd578063c4a6ee1e14610732578063c562887d14610752578063c6dd812f14610772578063c8edb049146107c6578063ce2b2cf0146107f3578063d422794714610813578063d8b31c7714610848578063dd99014b14610868578063de55abc31461087e578063de5f72fd1461089e578063e00dd161146108bf578063e39b32e8146108d6578063ee383937146108f6578063f2fde38b14610916578063f39e17d514610936578063f3fef3a314610958575b600080fd5b34801561023f57600080fd5b5061025361024e366004614b09565b610978565b005b34801561026157600080fd5b50610275610270366004614be2565b610b29565b6040519081526020015b60405180910390f35b34801561029457600080fd5b506102536102a3366004614bfb565b610c1d565b3480156102b457600080fd5b506102c86102c3366004614c17565b610c59565b60405161027f929190614c9b565b3480156102e257600080fd5b506102536102f1366004614cb6565b610fa1565b34801561030257600080fd5b5061027560de5481565b34801561031857600080fd5b50610275610327366004614cb6565b60df6020526000908152604090205481565b34801561034557600080fd5b5060e0546103569063ffffffff1681565b60405163ffffffff909116815260200161027f565b34801561037757600080fd5b5061038b610386366004614d17565b61106a565b60405161027f9190614d62565b3480156103a457600080fd5b50610102546103b9906001600160a01b031681565b60405161027f9190614e07565b3480156103d257600080fd5b506103f66103e1366004614be2565b60f26020526000908152604090205460ff1681565b604051901515815260200161027f565b34801561041257600080fd5b50610275610421366004614cb6565b60016020526000908152604090205481565b34801561043f57600080fd5b5060e05461035690600160201b900463ffffffff1681565b610253610465366004614e8a565b611578565b34801561047657600080fd5b50610275611632565b34801561048b57600080fd5b5061025361049a366004614fff565b6116e0565b3480156104ab57600080fd5b5061027560035481565b3480156104c157600080fd5b506102536119a9565b3480156104d657600080fd5b5060f65460f75460f8546104e992919083565b60405161027f939291906150af565b34801561050457600080fd5b506102536105133660046150c5565b6119bd565b34801561052457600080fd5b506103b96119db565b34801561053957600080fd5b506102536105483660046150e1565b6119ea565b34801561055957600080fd5b50610253610568366004614cb6565b6119fb565b34801561057957600080fd5b506103f6610588366004615156565b611b06565b34801561059957600080fd5b506103f66105a83660046150e1565b611b83565b3480156105b957600080fd5b506102536105c83660046151b1565b611d58565b3480156105d957600080fd5b506102756105e8366004614be2565b50600190565b3480156105fa57600080fd5b50610639610609366004614be2565b60f160205260009081526040902080546001909101546001600160801b0380831692600160801b90048116911683565b604080516001600160801b039485168152928416602084015292169181019190915260600161027f565b34801561066f57600080fd5b5061025361067e366004615210565b611de2565b34801561068f57600080fd5b5060fe5460ff5461069e919082565b6040805192835260208301919091520161027f565b3480156106bf57600080fd5b506103f66106ce366004614be2565b60026020526000908152604090205460ff1681565b3480156106ef57600080fd5b5060f5546103f69060ff1681565b34801561070957600080fd5b5061027561071836600461522b565b600060208181529281526040808220909352908152205481565b34801561073e57600080fd5b5061027561074d366004614be2565b611e10565b34801561075e57600080fd5b5061025361076d36600461524d565b611ebe565b34801561077e57600080fd5b5060f95460fa5460fb5460fc5460fd5461079c949392919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a00161027f565b3480156107d257600080fd5b506102756107e1366004614cb6565b60f46020526000908152604090205481565b3480156107ff57600080fd5b5061025361080e366004615282565b611ed2565b34801561081f57600080fd5b5061069e61082e366004614cb6565b610100602052600090815260409020805460019091015482565b34801561085457600080fd5b50610253610863366004614cb6565b612188565b34801561087457600080fd5b5061027560045481565b34801561088a57600080fd5b50610253610899366004615304565b6121b3565b3480156108aa57600080fd5b50610101546103b9906001600160a01b031681565b3480156108cb57600080fd5b506102756101035481565b3480156108e257600080fd5b506102536108f136600461524d565b61228a565b34801561090257600080fd5b5060f3546103b9906001600160a01b031681565b34801561092257600080fd5b50610253610931366004614cb6565b61229a565b34801561094257600080fd5b50610275600080516020615b7683398151915281565b34801561096457600080fd5b50610253610973366004614c17565b612310565b601554610100900460ff16158080156109985750601554600160ff909116105b806109b957506109a73061241a565b1580156109b9575060155460ff166001145b610a215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6015805460ff191660011790558015610a44576015805461ff0019166101001790555b610a508a8a8a8a612429565b60f380546001600160a01b03199081166001600160a01b0389811691909117909255865160f65560208088015160f75560408089015160f855875160f9559087015160fa5586015160fb55606086015160fc55608086015160fd805460ff19169115159190911790556101018054821686841617905561010280549091169184169190911790558015610b1d576015805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba39190615397565b905060128160ff161015610be0576000610bbe8260126153d0565b60ff169050610bce81600a6154d7565b610bd890856154e3565b925050610c17565b60128160ff161115610c13576000610bf96012836153d0565b60ff169050610c0981600a6154d7565b610bd89085615518565b8291505b50919050565b610c2561246d565b805160f955602081015160fa55604081015160fb55606081015160fc556080015160fd805460ff1916911515919091179055565b60f55460009060609060ff1615610c9157505060408051808201909152600681526518db1bdcd95960d21b6020820152600090610f9a565b60fc54831015610cc55750506040805180820190915260098152681b5a5b905b5bdd5b9d60ba1b6020820152600090610f9a565b60fa54831115610cf75750506040805180820190915260078152661d1e131a5b5a5d60ca1b6020820152600090610f9a565b60fd5460ff168015610d145750610102546001600160a01b031615155b15610e55576101025460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da0919061552c565b90506001600160a01b03811615610e5357604051633af32abf60e01b81526001600160a01b03821690633af32abf90610ddd908890600401614e07565b602060405180830381865afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e9190615549565b610e5357505060408051808201909152600f81526e1b9bdd081dda1a5d195b1a5cdd1959608a1b602082015260009150610f9a565b505b6001600160a01b03841660009081526101006020526040902060010154610e7f6201518042615566565b6001600160a01b038616600090815261010060205260409020541015610ea6575082610eb3565b610eb0848261557d565b90505b60fb54811115610ef05750506040805180820190915260118152701858d8dbdd5b9d11185a5b1e531a5b5a5d607a1b602082015260009150610f9a565b610efd6201518042615566565b60fe541015610f415760f954841115610f3c57505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b610f84565b60f95460ff54610f5290869061557d565b1115610f8457505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b5050604080516020810190915260008152600191505b9250929050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610fea5760405162461bcd60e51b8152600401610a1890615595565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661101c6124cc565b6001600160a01b0316146110425760405162461bcd60e51b8152600401610a18906155cf565b61104b816124e8565b60408051600080825260208201909252611067918391906124f0565b50565b6060816001600160401b03811115611084576110846148e8565b6040519080825280602002602001820160405280156110b757816020015b60608152602001906001900390816110a25790505b50905060005b828110156115705760008484838181106110d9576110d9615609565b90506020028101906110eb919061561f565b6110f49061563f565b6000878152602081815260408083208185015184528252909120548183015180519201919091209192509081146111625760405162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840c4d8dec6d640d0c2e6d60731b6044820152606401610a18565b600061117288846020015161265b565b8351519091506001600160401b0381111561118f5761118f6148e8565b6040519080825280602002602001820160405280156111c257816020015b60608152602001906001900390816111ad5790505b508585815181106111d5576111d5615609565b602002602001018190525060005b83515181101561155957600089848660000151848151811061120757611207615609565b602002602001015160a00151604051602001611225939291906157ce565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff161515600114156112c357604051806040016040528060148152602001731c9958d95a5c1d08185b1c9958591e481d5cd95960621b81525087878151811061129957611299615609565b602002602001015183815181106112b2576112b2615609565b602002602001018190525050611547565b6000818152600260205260409020805460ff1916600117905584518051839081106112f0576112f0615609565b602002602001015160600151600014801561132a5750845180518390811061131a5761131a615609565b6020026020010151608001516000145b6113685760405162461bcd60e51b815260206004820152600f60248201526e0dcdee840e6e8c2e4e840d2dcc8caf608b1b6044820152606401610a18565b828560000151838151811061137f5761137f615609565b602002602001015160000151146113cf5760405162461bcd60e51b81526020600482015260146024820152730e4cac6cad2e0e8a4dedee840dad2e6dac2e8c6d60631b6044820152606401610a18565b6113f5856000015183815181106113e8576113e8615609565b60200260200101516126df565b6114385760405162461bcd60e51b815260206004820152601460248201527372656365697074206e6f7420696e20626c6f636b60601b6044820152606401610a18565b60408501516001111561147f5760405162461bcd60e51b815260206004820152600f60248201526e1c9958d95a5c1d081d1bdbc81bdb19608a1b6044820152606401610a18565b60006114b98b87604001516114b4896000015187815181106114a3576114a3615609565b602002602001015160a00151612896565b612a6b565b9050806114ec576040518060400160405280600e81526020016d195e1958dd5d194819985a5b195960921b81525061150e565b60405180604001604052806008815260200167195e1958dd5d195960c21b8152505b88888151811061152057611520615609565b6020026020010151848151811061153957611539615609565b602002602001018190525050505b80611551816157ed565b9150506111e3565b505050508080611568906157ed565b9150506110bd565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115c15760405162461bcd60e51b8152600401610a1890615595565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115f36124cc565b6001600160a01b0316146116195760405162461bcd60e51b8152600401610a18906155cf565b611622826124e8565b61162e828260016124f0565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610a18565b50600080516020615b2f83398151915290565b60005b815181101561162e57600082828151811061170057611700615609565b602090810291909101810151808201518051908301208151608083015160608401516040519496509294607a8314946000946117429488949093909201615808565b60405160208183030381529060405280519060200120905060008460400151516001600160401b03811115611779576117796148e8565b6040519080825280602002602001820160405280156117a2578160200160208202803683370190505b50905060005b85604001515181101561189457600080876040015183815181106117ce576117ce615609565b60200260200101518060200190518101906117e99190615857565b9150915061184d611846866040517b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b8383612c1f565b84848151811061185f5761185f615609565b60200260200101906001600160a01b031690816001600160a01b0316815250505050808061188c906157ed565b9150506117a8565b5061189e81611b83565b6118dc5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207369676e65727360881b6044820152606401610a18565b60006118f086600001518760200151612c3c565b905060018110156119135760405162461bcd60e51b8152600401610a189061587b565b8551600090815260208181526040808320848452909152902085905583801561194157506000866080015151115b801561194f57506004548110155b156119665761196686608001518760600151612cbe565b8551604051600080516020615b968339815191529161198891849089906150af565b60405180910390a150505050505080806119a1906157ed565b9150506116e3565b6119b161246d565b6119bb6000612d69565b565b6119c561246d565b805160f655602081015160f7556040015160f855565b60ac546001600160a01b031690565b6119f261246d565b61106781612dbb565b611a0361246d565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a0823190611a39903090600401614e07565b602060405180830381865afa158015611a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7a91906158a2565b6040518363ffffffff1660e01b8152600401611a979291906158bb565b6020604051808303816000875af1158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada9190615549565b611af65760405162461bcd60e51b8152600401610a18906158d4565b5060f5805460ff19166001179055565b60f3546000906001600160a01b03163314611b4f5760405162461bcd60e51b81526020600482015260096024820152683737ba103a37b5b2b760b91b6044820152606401610a18565b60008080611b5f858701876158f6565b925092509250611b758883858a85156001612e51565b506001979650505050505050565b60008080805b8451811015611d4d576000611b9f600183615938565b90505b60008112611c3d57858181518110611bbc57611bbc615609565b60200260200101516001600160a01b0316868381518110611bdf57611bdf615609565b60200260200101516001600160a01b03161415611c2b5760405162461bcd60e51b815260206004820152600a602482015269323ab81039b4b3b732b960b11b6044820152606401610a18565b80611c3581615977565b915050611ba2565b5060045460016000878481518110611c5757611c57615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611c945782611c90816157ed565b9350505b60de5460df6000878481518110611cad57611cad615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611cea5781611ce6816157ed565b9250505b60e05463ffffffff1682148015611d2b575060e054600354606491611d1d91600160201b90910463ffffffff16906154e3565b611d279190615518565b8310155b15611d3b57506001949350505050565b80611d45816157ed565b915050611b89565b506000949350505050565b611d6061246d565b60005b83811015611ddb57828282818110611d7d57611d7d615609565b9050602002013560f46000878785818110611d9a57611d9a615609565b9050602002016020810190611daf9190614cb6565b6001600160a01b0316815260208101919091526040016000205580611dd3816157ed565b915050611d63565b5050505050565b611dea61246d565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a9190615397565b905060128160ff161015611ea5576000610bf98260126153d0565b60128160ff161115610c13576000610bbe6012836153d0565b611ecd33848484600080612e51565b505050565b60008681526020818152604080832088845290915290819020549051611efb9084908490615995565b60405180910390208114611f4b5760405162461bcd60e51b815260206004820152601760248201527634b73b30b634b21031b434b632103936382432b0b232b960491b6044820152606401610a18565b6000611f8d8885858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061300592505050565b91505060005b8581101561217d576000878783818110611faf57611faf615609565b9050602002810190611fc191906159a5565b604051611fcf929190615995565b604051809103902090508083146120155760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081c185c995b9d60b21b6044820152606401610a18565b60008061207a8c8b8b8781811061202e5761202e615609565b905060200281019061204091906159a5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061300592505050565b91509150612086600190565b8210156120a55760405162461bcd60e51b8152600401610a189061587b565b60008c81526020818152604080832085845290915290205415806120df575060008c81526020818152604080832085845290915290205483145b61211e5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481d995c9a599a595960821b6044820152606401610a18565b60008c81526020818152604080832085845290915290819020849055519094508490600080516020615b968339815191529061215f908e90859087906150af565b60405180910390a15050508080612175906157ed565b915050611f93565b505050505050505050565b61219061246d565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b60006121c260408801886159eb565b9050111561225a57604080516001808252818301909252600091816020015b6122136040518060a0016040528060008152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816121e157905050905061223187615a34565b8160008151811061224457612244615609565b6020026020010181905250612258816116e0565b505b821561227557612275863586868661080e60208c018c6159a5565b6122818635838361106a565b50505050505050565b611ecd3384848460016000612e51565b6122a261246d565b6001600160a01b0381166123075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a18565b61106781612d69565b61231861246d565b8061238d576040516370a0823160e01b81526001600160a01b038316906370a0823190612349903090600401614e07565b602060405180830381865afa158015612366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238a91906158a2565b90505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906123bb90339085906004016158bb565b6020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe9190615549565b61162e5760405162461bcd60e51b8152600401610a18906158d4565b6001600160a01b03163b151590565b61243161303a565b61243b8484612cbe565b61244482612dbb565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055505050565b336124766119db565b6001600160a01b0316146119bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600080516020615b2f833981519152546001600160a01b031690565b61106761246d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561252357611ecd836130ae565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561257d575060408051601f3d908101601f1916820190925261257a918101906158a2565b60015b6125e05760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a18565b600080516020615b2f833981519152811461264f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a18565b50611ecd838383613148565b60008061266f61266a84613173565b613199565b905061267a816131ea565b50612684816131ea565b5061268e816131ea565b50612698816131ea565b508361a4ec1415806126b65750600a6126b4826000015161323b565b115b156126c6576126c4816131ea565b505b6126d76126d2826131ea565b6132be565b949350505050565b60008082604001518360800151815181106126fc576126fc615609565b60200260200101519050600061271461266a83613173565b905083606001516000141561278d57835182516020840120146127885760405162461bcd60e51b815260206004820152602660248201527f7665726966795472696550726f6f6620726f6f74206e6f6465206861736820696044820152651b9d985b1a5960d21b6064820152608401610a18565b612842565b6020825110156127f55760006127a56126d2836131ea565b855190915081146127ef5760405162461bcd60e51b81526020600482015260146024820152733b32b934b33caa3934b2a83937b7b3101e10199960611b6044820152606401610a18565b50612842565b835182516020840120146128425760405162461bcd60e51b81526020600482015260146024820152737665726966795472696550726f6f6620656c736560601b6044820152606401610a18565b6000612851826000015161323b565b9050806011141561286e576128658561330b565b95945050505050565b8060021415612881576128658286613443565b60a085015151611d4d57506001949350505050565b6128c46040518060800160405280600060ff1681526020016000815260200160608152602001606081525090565b8151600090607f60f81b90849083906128df576128df615609565b01602001516001600160f81b031916116128f7575060015b600061290b61290685846136fc565b61373c565b90506129308160008151811061292357612923615609565b60200260200101516132be565b60ff168352805161294e908290600190811061292357612923615609565b60208401528051612979908290600290811061296c5761296c615609565b6020026020010151613845565b836040018190525060006129a68260038151811061299957612999615609565b602002602001015161373c565b905080516001600160401b038111156129c1576129c16148e8565b6040519080825280602002602001820160405280156129fa57816020015b6129e7614884565b8152602001906001900390816129df5790505b50606085015260005b8151811015612a6257612a2e828281518110612a2157612a21615609565b60200260200101516138c2565b85606001518281518110612a4457612a44615609565b60200260200101819052508080612a5a906157ed565b915050612a03565b50505050919050565b6000816000015160ff16600114612a8457506000612c18565b6000805b836060015151811015612c1457600084606001518281518110612aad57612aad615609565b602002602001015190508560f4600083600001516001600160a01b03166001600160a01b03168152602001908152602001600020541115612aee5750612c02565b80516001600160a01b0316600090815260f460205260409020541580612b405750600080516020615b768339815191528160200151600081518110612b3557612b35615609565b602002602001015114155b15612b4b5750612c02565b60008060008360400151806020019051810190612b689190615a40565b925092509250612b786101045490565b8314612b875750505050612c02565b60019550612bfd8460200151600181518110612ba557612ba5615609565b602002602001015160001c8560200151600281518110612bc757612bc7615609565b602002602001015160001c848d8d868a60200151600381518110612bed57612bed615609565b602002602001015160001c6139ec565b505050505b80612c0c816157ed565b915050612a88565b5090505b9392505050565b6000806000612c2f868686613c1d565b91509150612c1481613c56565b600080612c4b61266a84613173565b9050612c56816131ea565b50612c60816131ea565b50612c6a816131ea565b50612c74816131ea565b50612c7e816131ea565b50612c88816131ea565b508361a4ec141580612ca65750600a612ca4826000015161323b565b115b156126c657612cb4816131ea565b506126c4816131ea565b60005b8251811015612d20578160016000858481518110612ce157612ce1615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612d18906157ed565b915050612cc1565b50600481905581516003556040517f27330b21e104b5b4f17c1f89b946c154b973ab51773ac9debf76b53bb57a194790612d5d9084908490615a6e565b60405180910390a15050565b60ac80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60de8054906000612dcb836157ed565b919050555060005b8151811015612e345760de5460df6000848481518110612df557612df5615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612e2c906157ed565b915050612dd3565b505160e0805463ffffffff191663ffffffff909216919091179055565b612e5d86868587613d9f565b80612f1a5760f3546040516323b872dd60e01b81526001600160a01b03888116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af1158015612ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edf9190615549565b612f1a5760405162461bcd60e51b815260206004820152600c60248201526b7472616e7366657246726f6d60a01b6044820152606401610a18565b6000612f2584610b29565b90508686612f336101045490565b878430426101036000815480929190612f4b906157ed565b90915550604080516001600160a01b03998a166020820152978916908801526060870195909552608086019390935260a085019190915290931660c083015260e08201929092526101008101919091526101200160408051601f19818403018152828252805160209182012088845290830184905285151591830191909152426060830152906001600160a01b0380891691908a1690600080516020615b768339815191529060800160405180910390a450505050505050565b600080600061301661266a85613173565b90506130246126d2826131ea565b91506130308585612c3c565b9250509250929050565b601554610100900460ff166130a55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a18565b6119bb33612d69565b6130b78161241a565b6131195760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a18565b600080516020615b2f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61315183613f21565b60008251118061315e5750805b15611ecd5761316d8383613f61565b50505050565b61317b6148ae565b50604080518082019091528151815260209182019181019190915290565b6131a16148c8565b6131aa8261404a565b6131b357600080fd5b60006131c28360200151614083565b83602001516131d1919061557d565b6040805180820190915293845260208401525090919050565b6131f26148ae565b6131fb826140fe565b61320457600080fd5b6020820151600061321482614122565b9050613220818361557d565b60209485015260408051808201909152908152928301525090565b805160009061324c57506000919050565b60008061325c8460200151614083565b846020015161326b919061557d565b9050600084600001518560200151613283919061557d565b90505b808210156132b55761329782614122565b6132a1908361557d565b9150826132ad816157ed565b935050613286565b50909392505050565b8051600090158015906132d357508151602110155b6132dc57600080fd5b6000806132e8846141cb565b8151919350915060208210156126d75760208290036101000a9004949350505050565b600080826040015183608001518151811061332857613328615609565b6020026020010151905082602001515183606001511061339157600061336561335361290684613173565b60108151811061296c5761296c615609565b90508360a00151805190602001208180519060200120141561338b575060019392505050565b50613427565b600083602001518460600151815181106133ad576133ad615609565b016020015160f81c905060006133d96133c861290685613173565b838151811061296c5761296c615609565b9050805160001461342457602081015185526060850180516001919061340090839061557d565b9052506080850180516001919061341890839061557d565b905250612865856126df565b50505b60a08301515161343a5750600192915050565b50600092915050565b600080613457613452856131ea565b613845565b90506000613467613452866131ea565b602083015190915060fc1c600281141561352b5760006001845161348b9190615566565b9050600061349d856001846000614212565b905060006134b688602001518960600151856000614212565b905084805190602001208860a00151805190602001201415613523578080519060200120828051906020012014156134f757600196505050505050506136f6565b80516020820120613507836142f6565b80519060200120141561352357600196505050505050506136f6565b5050506136d8565b80600314156135e157600061354584600086516001614212565b60208701516060880151815192935060009261356f929190613568908290615566565b6000614212565b905083805190602001208760a001518051906020012014156135da578080519060200120828051906020012014156135af576001955050505050506136f6565b805160208201206135bf83614425565b8051906020012014156135da576001955050505050506136f6565b50506136d8565b8015806135ee5750806001145b156136a057825160006136048582846001614212565b9050600061361d88602001518960600151856000614212565b905080805190602001208280519060200120148061364f575080516020820120613646836142f6565b80519060200120145b15613523576020850151885260608801805184919061366f90839061557d565b9052506080880180516001919061368790839061557d565b905250613693886126df565b96505050505050506136f6565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610a18565b60a0850151516136ee57600193505050506136f6565b600093505050505b92915050565b6137046148ae565b60208301613712838261557d565b9050604051806040016040528084865161372c9190615566565b8152602001919091529392505050565b60606137478261404a565b61375057600080fd5b600061375b8361323b565b90506000816001600160401b03811115613777576137776148e8565b6040519080825280602002602001820160405280156137b057816020015b61379d6148ae565b8152602001906001900390816137955790505b50905060006137c28560200151614083565b85602001516137d1919061557d565b90506000805b8481101561383a576137e883614122565b915060405180604001604052808381526020018481525084828151811061381157613811615609565b6020908102919091010152613826828461557d565b925080613832816157ed565b9150506137d7565b509195945050505050565b805160609061385357600080fd5b60008061385f846141cb565b915091506000816001600160401b0381111561387d5761387d6148e8565b6040519080825280601f01601f1916602001820160405280156138a7576020820181803683370190505b509050602081016138b9848285614586565b50949350505050565b6138ca614884565b60006138d58361373c565b90506138fa816000815181106138ed576138ed615609565b6020026020010151614605565b6001600160a01b031682528051600090613921908390600190811061299957612999615609565b905080516001600160401b0381111561393c5761393c6148e8565b604051908082528060200260200182016040528015613965578160200160208202803683370190505b50602084015260005b81518110156139c857600061398e83838151811061292357612923615609565b60001b905080856020015183815181106139aa576139aa615609565b602090810291909101015250806139c0816157ed565b91505061396e565b506139df8260028151811061296c5761296c615609565b6040840152509092915050565b60006139f786611e10565b9050600080613a3083868015613a165750336001600160a01b038c1614155b8015613a2b5750336001600160a01b038d1614155b61461f565b90925090506000613a41828461557d565b600086815260f260205260409020805460ff191660011790559050613a658a61469a565b60f3546001600160a01b031663a9059cbb8b613a818488615566565b6040518363ffffffff1660e01b8152600401613a9e9291906158bb565b6020604051808303816000875af1158015613abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae19190615549565b613afd5760405162461bcd60e51b8152600401610a18906158d4565b8115613baf5760f35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90613b3590339086906004016158bb565b6020604051808303816000875af1158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190615549565b613baf5760405162461bcd60e51b815260206004820152600860248201526772656c617946656560c01b6044820152606401610a18565b6040805133815260208101869052908101829052606081018990526080810188905285906001600160a01b03808d1691908e16907f8f5fb725904dff7292d34df72f578088cca0aa71767d7d82fc40b1b786ef96a79060a00160405180910390a45050505050505050505050565b6000806001600160ff1b03831681613c3a60ff86901c601b61557d565b9050613c488782888561478c565b935093505050935093915050565b6000816004811115613c6a57613c6a615abf565b1415613c735750565b6001816004811115613c8757613c87615abf565b1415613cd05760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a18565b6002816004811115613ce457613ce4615abf565b1415613d325760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a18565b6003816004811115613d4657613d46615abf565b14156110675760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a18565b6001600160a01b038316613de65760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081d185c99d95d60921b6044820152606401610a18565b60008111613e2e5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081d185c99d95d10da185a5b9259605a1b6044820152606401610a18565b613e3b6201518042615566565b60fe541015613e4e574260fe55600060ff555b613e5b6201518042615566565b6001600160a01b038516600090815261010060205260409020541015613e9c576001600160a01b038416600090815261010060205260408120428155600101555b600080613ea98685610c59565b91509150818190613ecd5760405162461bcd60e51b8152600401610a189190615ad5565b508360fe6001016000828254613ee3919061557d565b90915550506001600160a01b0386166000908152610100602052604081206001018054869290613f1490849061557d565b9091555050505050505050565b613f2a816130ae565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060613f6c8361241a565b613fc75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a18565b600080846001600160a01b031684604051613fe29190615ae8565b600060405180830381855af49150503d806000811461401d576040519150601f19603f3d011682016040523d82523d6000602084013e614022565b606091505b50915091506128658282604051806060016040528060278152602001615b4f60279139614846565b805160009061405b57506000919050565b6020820151805160001a9060c0821015614079575060009392505050565b5060019392505050565b8051600090811a608081101561409c5750600092915050565b60b88110806140b7575060c081108015906140b7575060f881105b156140c55750600192915050565b60c08110156140f2576140da600160b86153d0565b6140e79060ff1682615566565b612c1890600161557d565b6140da600160f86153d0565b805180516020820151600092916141149161557d565b836020015110915050919050565b80516000908190811a608081101561413d57600191506141c4565b60b881101561416357614151608082615566565b61415c90600161557d565b91506141c4565b60c08110156141905760b78103600185019450806020036101000a855104600182018101935050506141c4565b60f88110156141a45761415160c082615566565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b60008060006141dd8460200151614083565b905060008185602001516141f1919061557d565b905060008286600001516142059190615566565b9196919550909350505050565b60606000614221602085615518565b90506000614230602086615afa565b61423b9060086154e3565b61424790610100615566565b9050602060008080886001600160401b03811115614267576142676148e8565b6040519080825280601f01601f191660200182016040528015614291576020820181803683370190505b5090508a8a01915087156142bb57818401516001600160fc1b031681850152602090930192600192505b825b868110156142db5782850151828601526020909401936001016142bd565b5083820151851c851b84820152505050505050949350505050565b606060008251600261430891906154e3565b90506000816001600160401b03811115614324576143246148e8565b6040519080825280601f01601f19166020018201604052801561434e576020820181803683370190505b50905060005b84518110156115705760008061439887848151811061437557614375615609565b01602001516001600160f81b031916600481901c916001600160fc1b0390911690565b909250905081846143aa8560026154e3565b815181106143ba576143ba615609565b60200101906001600160f81b031916908160001a90535080846143de8560026154e3565b6143e990600161557d565b815181106143f9576143f9615609565b60200101906001600160f81b031916908160001a9053505050808061441d906157ed565b915050614354565b6060600060018351600261443991906154e3565b6144439190615566565b90506000816001600160401b0381111561445f5761445f6148e8565b6040519080825280601f01601f191660200182016040528015614489576020820181803683370190505b5090508360008151811061449f5761449f615609565b602001015160f81c60f81b816000815181106144bd576144bd615609565b60200101906001600160f81b031916908160001a90535060015b8451811015611570576000806144f887848151811061437557614375615609565b90925090508184600161450c8660026154e3565b6145169190615566565b8151811061452657614526615609565b60200101906001600160f81b031916908160001a905350808461454a8560026154e3565b8151811061455a5761455a615609565b60200101906001600160f81b031916908160001a9053505050808061457e906157ed565b9150506144d7565b8061459057505050565b602081106145c857825182526145a760208461557d565b92506145b460208361557d565b91506145c1602082615566565b9050614590565b8015611ecd57600060016145dd836020615566565b6145e9906101006154d7565b6145f39190615566565b84518451821691191617835250505050565b805160009060151461461657600080fd5b6136f6826132be565b600080600061271060f6600201548661463891906154e3565b6146429190615518565b60f6549091508110156146575760f654614659565b805b60f75490915081111561466e5760f754614670565b805b905061467d600282615518565b9050808461468c57600061468e565b815b92509250509250929050565b610101546001600160a01b0316158015906147245750610101546040516374bf77e960e11b81526001600160a01b039091169063e97eefd2906146e1908490600401614e07565b6020604051808303816000875af1158015614700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147249190615549565b1561106757610101546040516306ee3b9f60e31b81526001600160a01b0390911690633771dcf89061475a908490600401614e07565b600060405180830381600087803b15801561477457600080fd5b505af1925050508015614785575060015b6110675750565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156147b9575060009050600361483d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561480d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166148365760006001925092505061483d565b9150600090505b94509492505050565b60608315614855575081612c18565b612c18838381511561486a5781518083602001fd5b8060405162461bcd60e51b8152600401610a189190615ad5565b604051806060016040528060006001600160a01b0316815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180604001604052806148db6148ae565b8152602001600081525090565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614920576149206148e8565b60405290565b60405160a081016001600160401b0381118282101715614920576149206148e8565b60405160c081016001600160401b0381118282101715614920576149206148e8565b604051601f8201601f191681016001600160401b0381118282101715614992576149926148e8565b604052919050565b60006001600160401b038211156149b3576149b36148e8565b5060051b60200190565b6001600160a01b038116811461106757600080fd5b600082601f8301126149e357600080fd5b813560206149f86149f38361499a565b61496a565b82815260059290921b84018101918181019086841115614a1757600080fd5b8286015b84811015614a3b578035614a2e816149bd565b8352918301918301614a1b565b509695505050505050565b803563ffffffff81168114614a5a57600080fd5b919050565b600060608284031215614a7157600080fd5b614a796148fe565b905081358152602082013560208201526040820135604082015292915050565b801515811461106757600080fd5b600060a08284031215614ab957600080fd5b614ac1614926565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135614af381614a99565b608082015292915050565b8035614a5a816149bd565b60008060008060008060008060006101e08a8c031215614b2857600080fd5b89356001600160401b0380821115614b3f57600080fd5b614b4b8d838e016149d2565b9a5060208c0135995060408c0135915080821115614b6857600080fd5b50614b758c828d016149d2565b975050614b8460608b01614a46565b955060808a0135614b94816149bd565b9450614ba38b60a08c01614a5f565b9350614bb38b6101008c01614aa7565b92506101a08a0135614bc4816149bd565b9150614bd36101c08b01614afe565b90509295985092959850929598565b600060208284031215614bf457600080fd5b5035919050565b600060a08284031215614c0d57600080fd5b612c188383614aa7565b60008060408385031215614c2a57600080fd5b8235614c35816149bd565b946020939093013593505050565b60005b83811015614c5e578181015183820152602001614c46565b8381111561316d5750506000910152565b60008151808452614c87816020860160208601614c43565b601f01601f19169290920160200192915050565b82151581526040602082015260006126d76040830184614c6f565b600060208284031215614cc857600080fd5b8135612c18816149bd565b60008083601f840112614ce557600080fd5b5081356001600160401b03811115614cfc57600080fd5b6020830191508360208260051b8501011115610f9a57600080fd5b600080600060408486031215614d2c57600080fd5b8335925060208401356001600160401b03811115614d4957600080fd5b614d5586828701614cd3565b9497909650939450505050565b6000602080830181845280855180835260408601915060059250604081841b8701018488016000805b84811015614df857898403603f19018652825180518086529089019089860190808a1b87018b01855b82811015614de257601f19898303018452614dd0828651614c6f565b948d0194938d01939150600101614db4565b50988b0198965050509288019250600101614d8b565b50919998505050505050505050565b6001600160a01b0391909116815260200190565b600082601f830112614e2c57600080fd5b81356001600160401b03811115614e4557614e456148e8565b614e58601f8201601f191660200161496a565b818152846020838601011115614e6d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614e9d57600080fd5b8235614ea8816149bd565b915060208301356001600160401b03811115614ec357600080fd5b614ecf85828601614e1b565b9150509250929050565b600082601f830112614eea57600080fd5b81356020614efa6149f38361499a565b82815260059290921b84018101918181019086841115614f1957600080fd5b8286015b84811015614a3b5780356001600160401b03811115614f3c5760008081fd5b614f4a8986838b0101614e1b565b845250918301918301614f1d565b600060a08284031215614f6a57600080fd5b614f72614926565b82358152905060208201356001600160401b0380821115614f9257600080fd5b614f9e85838601614e1b565b60208401526040840135915080821115614fb757600080fd5b614fc385838601614ed9565b6040840152606084013560608401526080840135915080821115614fe657600080fd5b50614ff3848285016149d2565b60808301525092915050565b6000602080838503121561501257600080fd5b82356001600160401b038082111561502957600080fd5b818501915085601f83011261503d57600080fd5b813561504b6149f38261499a565b81815260059190911b8301840190848101908883111561506a57600080fd5b8585015b838110156150a2578035858111156150865760008081fd5b6150948b89838a0101614f58565b84525091860191860161506e565b5098975050505050505050565b9283526020830191909152604082015260600190565b6000606082840312156150d757600080fd5b612c188383614a5f565b6000602082840312156150f357600080fd5b81356001600160401b0381111561510957600080fd5b6126d7848285016149d2565b60008083601f84011261512757600080fd5b5081356001600160401b0381111561513e57600080fd5b602083019150836020828501011115610f9a57600080fd5b6000806000806060858703121561516c57600080fd5b8435615177816149bd565b93506020850135925060408501356001600160401b0381111561519957600080fd5b6151a587828801615115565b95989497509550505050565b600080600080604085870312156151c757600080fd5b84356001600160401b03808211156151de57600080fd5b6151ea88838901614cd3565b9096509450602087013591508082111561520357600080fd5b506151a587828801614cd3565b60006020828403121561522257600080fd5b612c1882614a46565b6000806040838503121561523e57600080fd5b50508035926020909101359150565b60008060006060848603121561526257600080fd5b833561526d816149bd565b95602085013595506040909401359392505050565b6000806000806000806080878903121561529b57600080fd5b863595506020870135945060408701356001600160401b03808211156152c057600080fd5b6152cc8a838b01614cd3565b909650945060608901359150808211156152e557600080fd5b506152f289828a01615115565b979a9699509497509295939492505050565b6000806000806000806080878903121561531d57600080fd5b86356001600160401b038082111561533457600080fd5b9088019060a0828b03121561534857600080fd5b909650602088013595506040880135908082111561536557600080fd5b6153718a838b01614cd3565b9096509450606089013591508082111561538a57600080fd5b506152f289828a01614cd3565b6000602082840312156153a957600080fd5b815160ff81168114612c1857600080fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8416808210156153ea576153ea6153ba565b90039392505050565b600181815b8085111561542e578160001904821115615414576154146153ba565b8085161561542157918102915b93841c93908002906153f8565b509250929050565b600082615445575060016136f6565b81615452575060006136f6565b816001811461546857600281146154725761548e565b60019150506136f6565b60ff841115615483576154836153ba565b50506001821b6136f6565b5060208310610133831016604e8410600b84101617156154b1575081810a6136f6565b6154bb83836153f3565b80600019048211156154cf576154cf6153ba565b029392505050565b6000612c188383615436565b60008160001904831182151516156154fd576154fd6153ba565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261552757615527615502565b500490565b60006020828403121561553e57600080fd5b8151612c18816149bd565b60006020828403121561555b57600080fd5b8151612c1881614a99565b600082821015615578576155786153ba565b500390565b60008219821115615590576155906153ba565b500190565b6020808252602c90820152600080516020615b0f83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615b0f83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261563557600080fd5b9190910192915050565b6000606080833603121561565257600080fd5b61565a6148fe565b83356001600160401b038082111561567157600080fd5b9085019036601f83011261568457600080fd5b813560206156946149f38361499a565b82815260059290921b840181019181810190368411156156b357600080fd5b8286015b8481101561578f578035868111156156cf5760008081fd5b870160c036829003601f19018113156156e85760008081fd5b6156f0614948565b8683013581526040808401358a81111561570a5760008081fd5b615718368a83880101614e1b565b89840152508c8401358a81111561572f5760008081fd5b61573d368a83880101614ed9565b8284015250506080808401358d83015260a080850135828401528385013593508a84111561576d57600091508182fd5b61577b368a86880101614e1b565b9083015250855250509183019183016156b7565b50865250878101359550828611156157a657600080fd5b6157b236878a01614e1b565b8186015250505050604084013560408201528092505050919050565b8381528260208201526060604082015260006128656060830184614c6f565b6000600019821415615801576158016153ba565b5060010190565b84815260006020858184015260408301855182870160005b828110156158455781516001600160a01b031684529284019290840190600101615820565b50505093845290920195945050505050565b6000806040838503121561586a57600080fd5b505080516020909101519092909150565b6020808252600d908201526c189b1bd8dac81d1bdbc81bdb19609a1b604082015260600190565b6000602082840312156158b457600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6020808252600890820152673a3930b739b332b960c11b604082015260600190565b60008060006060848603121561590b57600080fd5b83359250602084013561591d816149bd565b9150604084013561592d81614a99565b809150509250925092565b60008083128015600160ff1b850184121615615956576159566153ba565b6001600160ff1b0384018313811615615971576159716153ba565b50500390565b6000600160ff1b82141561598d5761598d6153ba565b506000190190565b8183823760009101908152919050565b6000808335601e198436030181126159bc57600080fd5b8301803591506001600160401b038211156159d657600080fd5b602001915036819003821315610f9a57600080fd5b6000808335601e19843603018112615a0257600080fd5b8301803591506001600160401b03821115615a1c57600080fd5b6020019150600581901b3603821315610f9a57600080fd5b60006136f63683614f58565b600080600060608486031215615a5557600080fd5b8351925060208401519150604084015161592d81614a99565b604080825283519082018190526000906020906060840190828701845b82811015615ab05781516001600160a01b031684529284019290840190600101615a8b565b50505092019290925292915050565b634e487b7160e01b600052602160045260246000fd5b602081526000612c186020830184614c6f565b60008251615635818460208701614c43565b600082615b0957615b09615502565b50069056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644246d22454f5bd543c70e6ffcca20eed2dcf09d3beef6d39e415385538b02d0a7f7083e3a64a44d5c6f241eebc1447aa155764f7f6eb1508b4ef82dd555e9d68a264697066735822122087416e728c7bfc40380028fcf9c9009b285251247a2baf0551df8c1f1fa9301664736f6c634300080a0033",
  "deployedBytecode": "0x60806040526004361061022e5760003560e01c8063183d4c8f146102335780632784b2381461025557806329b70872146102885780633095634a146102a85780633659cfe6146102d6578063370a4250146102f65780633811da501461030c5780633886d21e146103395780633cca046d1461036b5780633e6326fc14610398578063425cfb53146103c65780634406acdd146104065780634c83f9e4146104335780634f1ef2861461045757806352d1902d1461046a5780635c8430601461047f5780635d593f8d1461049f578063715018a6146104b55780637b0240c0146104ca57806382dc737d146104f85780638da5cb5b14610518578063930af3541461052d57806394cb97991461054d578063a4c0ed361461056d578063a8b8be181461058d578063a976acf3146105ad578063a9c4b87e146105cd578063af17773c146105ee578063b1228a6314610663578063b2f7667f14610683578063be58d44d146106b3578063c2b6b58c146106e3578063c3e6978f146106fd578063c4a6ee1e14610732578063c562887d14610752578063c6dd812f14610772578063c8edb049146107c6578063ce2b2cf0146107f3578063d422794714610813578063d8b31c7714610848578063dd99014b14610868578063de55abc31461087e578063de5f72fd1461089e578063e00dd161146108bf578063e39b32e8146108d6578063ee383937146108f6578063f2fde38b14610916578063f39e17d514610936578063f3fef3a314610958575b600080fd5b34801561023f57600080fd5b5061025361024e366004614b09565b610978565b005b34801561026157600080fd5b50610275610270366004614be2565b610b29565b6040519081526020015b60405180910390f35b34801561029457600080fd5b506102536102a3366004614bfb565b610c1d565b3480156102b457600080fd5b506102c86102c3366004614c17565b610c59565b60405161027f929190614c9b565b3480156102e257600080fd5b506102536102f1366004614cb6565b610fa1565b34801561030257600080fd5b5061027560de5481565b34801561031857600080fd5b50610275610327366004614cb6565b60df6020526000908152604090205481565b34801561034557600080fd5b5060e0546103569063ffffffff1681565b60405163ffffffff909116815260200161027f565b34801561037757600080fd5b5061038b610386366004614d17565b61106a565b60405161027f9190614d62565b3480156103a457600080fd5b50610102546103b9906001600160a01b031681565b60405161027f9190614e07565b3480156103d257600080fd5b506103f66103e1366004614be2565b60f26020526000908152604090205460ff1681565b604051901515815260200161027f565b34801561041257600080fd5b50610275610421366004614cb6565b60016020526000908152604090205481565b34801561043f57600080fd5b5060e05461035690600160201b900463ffffffff1681565b610253610465366004614e8a565b611578565b34801561047657600080fd5b50610275611632565b34801561048b57600080fd5b5061025361049a366004614fff565b6116e0565b3480156104ab57600080fd5b5061027560035481565b3480156104c157600080fd5b506102536119a9565b3480156104d657600080fd5b5060f65460f75460f8546104e992919083565b60405161027f939291906150af565b34801561050457600080fd5b506102536105133660046150c5565b6119bd565b34801561052457600080fd5b506103b96119db565b34801561053957600080fd5b506102536105483660046150e1565b6119ea565b34801561055957600080fd5b50610253610568366004614cb6565b6119fb565b34801561057957600080fd5b506103f6610588366004615156565b611b06565b34801561059957600080fd5b506103f66105a83660046150e1565b611b83565b3480156105b957600080fd5b506102536105c83660046151b1565b611d58565b3480156105d957600080fd5b506102756105e8366004614be2565b50600190565b3480156105fa57600080fd5b50610639610609366004614be2565b60f160205260009081526040902080546001909101546001600160801b0380831692600160801b90048116911683565b604080516001600160801b039485168152928416602084015292169181019190915260600161027f565b34801561066f57600080fd5b5061025361067e366004615210565b611de2565b34801561068f57600080fd5b5060fe5460ff5461069e919082565b6040805192835260208301919091520161027f565b3480156106bf57600080fd5b506103f66106ce366004614be2565b60026020526000908152604090205460ff1681565b3480156106ef57600080fd5b5060f5546103f69060ff1681565b34801561070957600080fd5b5061027561071836600461522b565b600060208181529281526040808220909352908152205481565b34801561073e57600080fd5b5061027561074d366004614be2565b611e10565b34801561075e57600080fd5b5061025361076d36600461524d565b611ebe565b34801561077e57600080fd5b5060f95460fa5460fb5460fc5460fd5461079c949392919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a00161027f565b3480156107d257600080fd5b506102756107e1366004614cb6565b60f46020526000908152604090205481565b3480156107ff57600080fd5b5061025361080e366004615282565b611ed2565b34801561081f57600080fd5b5061069e61082e366004614cb6565b610100602052600090815260409020805460019091015482565b34801561085457600080fd5b50610253610863366004614cb6565b612188565b34801561087457600080fd5b5061027560045481565b34801561088a57600080fd5b50610253610899366004615304565b6121b3565b3480156108aa57600080fd5b50610101546103b9906001600160a01b031681565b3480156108cb57600080fd5b506102756101035481565b3480156108e257600080fd5b506102536108f136600461524d565b61228a565b34801561090257600080fd5b5060f3546103b9906001600160a01b031681565b34801561092257600080fd5b50610253610931366004614cb6565b61229a565b34801561094257600080fd5b50610275600080516020615b7683398151915281565b34801561096457600080fd5b50610253610973366004614c17565b612310565b601554610100900460ff16158080156109985750601554600160ff909116105b806109b957506109a73061241a565b1580156109b9575060155460ff166001145b610a215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6015805460ff191660011790558015610a44576015805461ff0019166101001790555b610a508a8a8a8a612429565b60f380546001600160a01b03199081166001600160a01b0389811691909117909255865160f65560208088015160f75560408089015160f855875160f9559087015160fa5586015160fb55606086015160fc55608086015160fd805460ff19169115159190911790556101018054821686841617905561010280549091169184169190911790558015610b1d576015805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba39190615397565b905060128160ff161015610be0576000610bbe8260126153d0565b60ff169050610bce81600a6154d7565b610bd890856154e3565b925050610c17565b60128160ff161115610c13576000610bf96012836153d0565b60ff169050610c0981600a6154d7565b610bd89085615518565b8291505b50919050565b610c2561246d565b805160f955602081015160fa55604081015160fb55606081015160fc556080015160fd805460ff1916911515919091179055565b60f55460009060609060ff1615610c9157505060408051808201909152600681526518db1bdcd95960d21b6020820152600090610f9a565b60fc54831015610cc55750506040805180820190915260098152681b5a5b905b5bdd5b9d60ba1b6020820152600090610f9a565b60fa54831115610cf75750506040805180820190915260078152661d1e131a5b5a5d60ca1b6020820152600090610f9a565b60fd5460ff168015610d145750610102546001600160a01b031615155b15610e55576101025460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da0919061552c565b90506001600160a01b03811615610e5357604051633af32abf60e01b81526001600160a01b03821690633af32abf90610ddd908890600401614e07565b602060405180830381865afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e9190615549565b610e5357505060408051808201909152600f81526e1b9bdd081dda1a5d195b1a5cdd1959608a1b602082015260009150610f9a565b505b6001600160a01b03841660009081526101006020526040902060010154610e7f6201518042615566565b6001600160a01b038616600090815261010060205260409020541015610ea6575082610eb3565b610eb0848261557d565b90505b60fb54811115610ef05750506040805180820190915260118152701858d8dbdd5b9d11185a5b1e531a5b5a5d607a1b602082015260009150610f9a565b610efd6201518042615566565b60fe541015610f415760f954841115610f3c57505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b610f84565b60f95460ff54610f5290869061557d565b1115610f8457505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b5050604080516020810190915260008152600191505b9250929050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610fea5760405162461bcd60e51b8152600401610a1890615595565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661101c6124cc565b6001600160a01b0316146110425760405162461bcd60e51b8152600401610a18906155cf565b61104b816124e8565b60408051600080825260208201909252611067918391906124f0565b50565b6060816001600160401b03811115611084576110846148e8565b6040519080825280602002602001820160405280156110b757816020015b60608152602001906001900390816110a25790505b50905060005b828110156115705760008484838181106110d9576110d9615609565b90506020028101906110eb919061561f565b6110f49061563f565b6000878152602081815260408083208185015184528252909120548183015180519201919091209192509081146111625760405162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840c4d8dec6d640d0c2e6d60731b6044820152606401610a18565b600061117288846020015161265b565b8351519091506001600160401b0381111561118f5761118f6148e8565b6040519080825280602002602001820160405280156111c257816020015b60608152602001906001900390816111ad5790505b508585815181106111d5576111d5615609565b602002602001018190525060005b83515181101561155957600089848660000151848151811061120757611207615609565b602002602001015160a00151604051602001611225939291906157ce565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff161515600114156112c357604051806040016040528060148152602001731c9958d95a5c1d08185b1c9958591e481d5cd95960621b81525087878151811061129957611299615609565b602002602001015183815181106112b2576112b2615609565b602002602001018190525050611547565b6000818152600260205260409020805460ff1916600117905584518051839081106112f0576112f0615609565b602002602001015160600151600014801561132a5750845180518390811061131a5761131a615609565b6020026020010151608001516000145b6113685760405162461bcd60e51b815260206004820152600f60248201526e0dcdee840e6e8c2e4e840d2dcc8caf608b1b6044820152606401610a18565b828560000151838151811061137f5761137f615609565b602002602001015160000151146113cf5760405162461bcd60e51b81526020600482015260146024820152730e4cac6cad2e0e8a4dedee840dad2e6dac2e8c6d60631b6044820152606401610a18565b6113f5856000015183815181106113e8576113e8615609565b60200260200101516126df565b6114385760405162461bcd60e51b815260206004820152601460248201527372656365697074206e6f7420696e20626c6f636b60601b6044820152606401610a18565b60408501516001111561147f5760405162461bcd60e51b815260206004820152600f60248201526e1c9958d95a5c1d081d1bdbc81bdb19608a1b6044820152606401610a18565b60006114b98b87604001516114b4896000015187815181106114a3576114a3615609565b602002602001015160a00151612896565b612a6b565b9050806114ec576040518060400160405280600e81526020016d195e1958dd5d194819985a5b195960921b81525061150e565b60405180604001604052806008815260200167195e1958dd5d195960c21b8152505b88888151811061152057611520615609565b6020026020010151848151811061153957611539615609565b602002602001018190525050505b80611551816157ed565b9150506111e3565b505050508080611568906157ed565b9150506110bd565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115c15760405162461bcd60e51b8152600401610a1890615595565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115f36124cc565b6001600160a01b0316146116195760405162461bcd60e51b8152600401610a18906155cf565b611622826124e8565b61162e828260016124f0565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610a18565b50600080516020615b2f83398151915290565b60005b815181101561162e57600082828151811061170057611700615609565b602090810291909101810151808201518051908301208151608083015160608401516040519496509294607a8314946000946117429488949093909201615808565b60405160208183030381529060405280519060200120905060008460400151516001600160401b03811115611779576117796148e8565b6040519080825280602002602001820160405280156117a2578160200160208202803683370190505b50905060005b85604001515181101561189457600080876040015183815181106117ce576117ce615609565b60200260200101518060200190518101906117e99190615857565b9150915061184d611846866040517b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b8383612c1f565b84848151811061185f5761185f615609565b60200260200101906001600160a01b031690816001600160a01b0316815250505050808061188c906157ed565b9150506117a8565b5061189e81611b83565b6118dc5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207369676e65727360881b6044820152606401610a18565b60006118f086600001518760200151612c3c565b905060018110156119135760405162461bcd60e51b8152600401610a189061587b565b8551600090815260208181526040808320848452909152902085905583801561194157506000866080015151115b801561194f57506004548110155b156119665761196686608001518760600151612cbe565b8551604051600080516020615b968339815191529161198891849089906150af565b60405180910390a150505050505080806119a1906157ed565b9150506116e3565b6119b161246d565b6119bb6000612d69565b565b6119c561246d565b805160f655602081015160f7556040015160f855565b60ac546001600160a01b031690565b6119f261246d565b61106781612dbb565b611a0361246d565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a0823190611a39903090600401614e07565b602060405180830381865afa158015611a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7a91906158a2565b6040518363ffffffff1660e01b8152600401611a979291906158bb565b6020604051808303816000875af1158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada9190615549565b611af65760405162461bcd60e51b8152600401610a18906158d4565b5060f5805460ff19166001179055565b60f3546000906001600160a01b03163314611b4f5760405162461bcd60e51b81526020600482015260096024820152683737ba103a37b5b2b760b91b6044820152606401610a18565b60008080611b5f858701876158f6565b925092509250611b758883858a85156001612e51565b506001979650505050505050565b60008080805b8451811015611d4d576000611b9f600183615938565b90505b60008112611c3d57858181518110611bbc57611bbc615609565b60200260200101516001600160a01b0316868381518110611bdf57611bdf615609565b60200260200101516001600160a01b03161415611c2b5760405162461bcd60e51b815260206004820152600a602482015269323ab81039b4b3b732b960b11b6044820152606401610a18565b80611c3581615977565b915050611ba2565b5060045460016000878481518110611c5757611c57615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611c945782611c90816157ed565b9350505b60de5460df6000878481518110611cad57611cad615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611cea5781611ce6816157ed565b9250505b60e05463ffffffff1682148015611d2b575060e054600354606491611d1d91600160201b90910463ffffffff16906154e3565b611d279190615518565b8310155b15611d3b57506001949350505050565b80611d45816157ed565b915050611b89565b506000949350505050565b611d6061246d565b60005b83811015611ddb57828282818110611d7d57611d7d615609565b9050602002013560f46000878785818110611d9a57611d9a615609565b9050602002016020810190611daf9190614cb6565b6001600160a01b0316815260208101919091526040016000205580611dd3816157ed565b915050611d63565b5050505050565b611dea61246d565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a9190615397565b905060128160ff161015611ea5576000610bf98260126153d0565b60128160ff161115610c13576000610bbe6012836153d0565b611ecd33848484600080612e51565b505050565b60008681526020818152604080832088845290915290819020549051611efb9084908490615995565b60405180910390208114611f4b5760405162461bcd60e51b815260206004820152601760248201527634b73b30b634b21031b434b632103936382432b0b232b960491b6044820152606401610a18565b6000611f8d8885858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061300592505050565b91505060005b8581101561217d576000878783818110611faf57611faf615609565b9050602002810190611fc191906159a5565b604051611fcf929190615995565b604051809103902090508083146120155760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081c185c995b9d60b21b6044820152606401610a18565b60008061207a8c8b8b8781811061202e5761202e615609565b905060200281019061204091906159a5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061300592505050565b91509150612086600190565b8210156120a55760405162461bcd60e51b8152600401610a189061587b565b60008c81526020818152604080832085845290915290205415806120df575060008c81526020818152604080832085845290915290205483145b61211e5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481d995c9a599a595960821b6044820152606401610a18565b60008c81526020818152604080832085845290915290819020849055519094508490600080516020615b968339815191529061215f908e90859087906150af565b60405180910390a15050508080612175906157ed565b915050611f93565b505050505050505050565b61219061246d565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b60006121c260408801886159eb565b9050111561225a57604080516001808252818301909252600091816020015b6122136040518060a0016040528060008152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816121e157905050905061223187615a34565b8160008151811061224457612244615609565b6020026020010181905250612258816116e0565b505b821561227557612275863586868661080e60208c018c6159a5565b6122818635838361106a565b50505050505050565b611ecd3384848460016000612e51565b6122a261246d565b6001600160a01b0381166123075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a18565b61106781612d69565b61231861246d565b8061238d576040516370a0823160e01b81526001600160a01b038316906370a0823190612349903090600401614e07565b602060405180830381865afa158015612366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238a91906158a2565b90505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906123bb90339085906004016158bb565b6020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe9190615549565b61162e5760405162461bcd60e51b8152600401610a18906158d4565b6001600160a01b03163b151590565b61243161303a565b61243b8484612cbe565b61244482612dbb565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055505050565b336124766119db565b6001600160a01b0316146119bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600080516020615b2f833981519152546001600160a01b031690565b61106761246d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561252357611ecd836130ae565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561257d575060408051601f3d908101601f1916820190925261257a918101906158a2565b60015b6125e05760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a18565b600080516020615b2f833981519152811461264f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a18565b50611ecd838383613148565b60008061266f61266a84613173565b613199565b905061267a816131ea565b50612684816131ea565b5061268e816131ea565b50612698816131ea565b508361a4ec1415806126b65750600a6126b4826000015161323b565b115b156126c6576126c4816131ea565b505b6126d76126d2826131ea565b6132be565b949350505050565b60008082604001518360800151815181106126fc576126fc615609565b60200260200101519050600061271461266a83613173565b905083606001516000141561278d57835182516020840120146127885760405162461bcd60e51b815260206004820152602660248201527f7665726966795472696550726f6f6620726f6f74206e6f6465206861736820696044820152651b9d985b1a5960d21b6064820152608401610a18565b612842565b6020825110156127f55760006127a56126d2836131ea565b855190915081146127ef5760405162461bcd60e51b81526020600482015260146024820152733b32b934b33caa3934b2a83937b7b3101e10199960611b6044820152606401610a18565b50612842565b835182516020840120146128425760405162461bcd60e51b81526020600482015260146024820152737665726966795472696550726f6f6620656c736560601b6044820152606401610a18565b6000612851826000015161323b565b9050806011141561286e576128658561330b565b95945050505050565b8060021415612881576128658286613443565b60a085015151611d4d57506001949350505050565b6128c46040518060800160405280600060ff1681526020016000815260200160608152602001606081525090565b8151600090607f60f81b90849083906128df576128df615609565b01602001516001600160f81b031916116128f7575060015b600061290b61290685846136fc565b61373c565b90506129308160008151811061292357612923615609565b60200260200101516132be565b60ff168352805161294e908290600190811061292357612923615609565b60208401528051612979908290600290811061296c5761296c615609565b6020026020010151613845565b836040018190525060006129a68260038151811061299957612999615609565b602002602001015161373c565b905080516001600160401b038111156129c1576129c16148e8565b6040519080825280602002602001820160405280156129fa57816020015b6129e7614884565b8152602001906001900390816129df5790505b50606085015260005b8151811015612a6257612a2e828281518110612a2157612a21615609565b60200260200101516138c2565b85606001518281518110612a4457612a44615609565b60200260200101819052508080612a5a906157ed565b915050612a03565b50505050919050565b6000816000015160ff16600114612a8457506000612c18565b6000805b836060015151811015612c1457600084606001518281518110612aad57612aad615609565b602002602001015190508560f4600083600001516001600160a01b03166001600160a01b03168152602001908152602001600020541115612aee5750612c02565b80516001600160a01b0316600090815260f460205260409020541580612b405750600080516020615b768339815191528160200151600081518110612b3557612b35615609565b602002602001015114155b15612b4b5750612c02565b60008060008360400151806020019051810190612b689190615a40565b925092509250612b786101045490565b8314612b875750505050612c02565b60019550612bfd8460200151600181518110612ba557612ba5615609565b602002602001015160001c8560200151600281518110612bc757612bc7615609565b602002602001015160001c848d8d868a60200151600381518110612bed57612bed615609565b602002602001015160001c6139ec565b505050505b80612c0c816157ed565b915050612a88565b5090505b9392505050565b6000806000612c2f868686613c1d565b91509150612c1481613c56565b600080612c4b61266a84613173565b9050612c56816131ea565b50612c60816131ea565b50612c6a816131ea565b50612c74816131ea565b50612c7e816131ea565b50612c88816131ea565b508361a4ec141580612ca65750600a612ca4826000015161323b565b115b156126c657612cb4816131ea565b506126c4816131ea565b60005b8251811015612d20578160016000858481518110612ce157612ce1615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612d18906157ed565b915050612cc1565b50600481905581516003556040517f27330b21e104b5b4f17c1f89b946c154b973ab51773ac9debf76b53bb57a194790612d5d9084908490615a6e565b60405180910390a15050565b60ac80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60de8054906000612dcb836157ed565b919050555060005b8151811015612e345760de5460df6000848481518110612df557612df5615609565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612e2c906157ed565b915050612dd3565b505160e0805463ffffffff191663ffffffff909216919091179055565b612e5d86868587613d9f565b80612f1a5760f3546040516323b872dd60e01b81526001600160a01b03888116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af1158015612ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edf9190615549565b612f1a5760405162461bcd60e51b815260206004820152600c60248201526b7472616e7366657246726f6d60a01b6044820152606401610a18565b6000612f2584610b29565b90508686612f336101045490565b878430426101036000815480929190612f4b906157ed565b90915550604080516001600160a01b03998a166020820152978916908801526060870195909552608086019390935260a085019190915290931660c083015260e08201929092526101008101919091526101200160408051601f19818403018152828252805160209182012088845290830184905285151591830191909152426060830152906001600160a01b0380891691908a1690600080516020615b768339815191529060800160405180910390a450505050505050565b600080600061301661266a85613173565b90506130246126d2826131ea565b91506130308585612c3c565b9250509250929050565b601554610100900460ff166130a55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a18565b6119bb33612d69565b6130b78161241a565b6131195760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a18565b600080516020615b2f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61315183613f21565b60008251118061315e5750805b15611ecd5761316d8383613f61565b50505050565b61317b6148ae565b50604080518082019091528151815260209182019181019190915290565b6131a16148c8565b6131aa8261404a565b6131b357600080fd5b60006131c28360200151614083565b83602001516131d1919061557d565b6040805180820190915293845260208401525090919050565b6131f26148ae565b6131fb826140fe565b61320457600080fd5b6020820151600061321482614122565b9050613220818361557d565b60209485015260408051808201909152908152928301525090565b805160009061324c57506000919050565b60008061325c8460200151614083565b846020015161326b919061557d565b9050600084600001518560200151613283919061557d565b90505b808210156132b55761329782614122565b6132a1908361557d565b9150826132ad816157ed565b935050613286565b50909392505050565b8051600090158015906132d357508151602110155b6132dc57600080fd5b6000806132e8846141cb565b8151919350915060208210156126d75760208290036101000a9004949350505050565b600080826040015183608001518151811061332857613328615609565b6020026020010151905082602001515183606001511061339157600061336561335361290684613173565b60108151811061296c5761296c615609565b90508360a00151805190602001208180519060200120141561338b575060019392505050565b50613427565b600083602001518460600151815181106133ad576133ad615609565b016020015160f81c905060006133d96133c861290685613173565b838151811061296c5761296c615609565b9050805160001461342457602081015185526060850180516001919061340090839061557d565b9052506080850180516001919061341890839061557d565b905250612865856126df565b50505b60a08301515161343a5750600192915050565b50600092915050565b600080613457613452856131ea565b613845565b90506000613467613452866131ea565b602083015190915060fc1c600281141561352b5760006001845161348b9190615566565b9050600061349d856001846000614212565b905060006134b688602001518960600151856000614212565b905084805190602001208860a00151805190602001201415613523578080519060200120828051906020012014156134f757600196505050505050506136f6565b80516020820120613507836142f6565b80519060200120141561352357600196505050505050506136f6565b5050506136d8565b80600314156135e157600061354584600086516001614212565b60208701516060880151815192935060009261356f929190613568908290615566565b6000614212565b905083805190602001208760a001518051906020012014156135da578080519060200120828051906020012014156135af576001955050505050506136f6565b805160208201206135bf83614425565b8051906020012014156135da576001955050505050506136f6565b50506136d8565b8015806135ee5750806001145b156136a057825160006136048582846001614212565b9050600061361d88602001518960600151856000614212565b905080805190602001208280519060200120148061364f575080516020820120613646836142f6565b80519060200120145b15613523576020850151885260608801805184919061366f90839061557d565b9052506080880180516001919061368790839061557d565b905250613693886126df565b96505050505050506136f6565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610a18565b60a0850151516136ee57600193505050506136f6565b600093505050505b92915050565b6137046148ae565b60208301613712838261557d565b9050604051806040016040528084865161372c9190615566565b8152602001919091529392505050565b60606137478261404a565b61375057600080fd5b600061375b8361323b565b90506000816001600160401b03811115613777576137776148e8565b6040519080825280602002602001820160405280156137b057816020015b61379d6148ae565b8152602001906001900390816137955790505b50905060006137c28560200151614083565b85602001516137d1919061557d565b90506000805b8481101561383a576137e883614122565b915060405180604001604052808381526020018481525084828151811061381157613811615609565b6020908102919091010152613826828461557d565b925080613832816157ed565b9150506137d7565b509195945050505050565b805160609061385357600080fd5b60008061385f846141cb565b915091506000816001600160401b0381111561387d5761387d6148e8565b6040519080825280601f01601f1916602001820160405280156138a7576020820181803683370190505b509050602081016138b9848285614586565b50949350505050565b6138ca614884565b60006138d58361373c565b90506138fa816000815181106138ed576138ed615609565b6020026020010151614605565b6001600160a01b031682528051600090613921908390600190811061299957612999615609565b905080516001600160401b0381111561393c5761393c6148e8565b604051908082528060200260200182016040528015613965578160200160208202803683370190505b50602084015260005b81518110156139c857600061398e83838151811061292357612923615609565b60001b905080856020015183815181106139aa576139aa615609565b602090810291909101015250806139c0816157ed565b91505061396e565b506139df8260028151811061296c5761296c615609565b6040840152509092915050565b60006139f786611e10565b9050600080613a3083868015613a165750336001600160a01b038c1614155b8015613a2b5750336001600160a01b038d1614155b61461f565b90925090506000613a41828461557d565b600086815260f260205260409020805460ff191660011790559050613a658a61469a565b60f3546001600160a01b031663a9059cbb8b613a818488615566565b6040518363ffffffff1660e01b8152600401613a9e9291906158bb565b6020604051808303816000875af1158015613abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae19190615549565b613afd5760405162461bcd60e51b8152600401610a18906158d4565b8115613baf5760f35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90613b3590339086906004016158bb565b6020604051808303816000875af1158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190615549565b613baf5760405162461bcd60e51b815260206004820152600860248201526772656c617946656560c01b6044820152606401610a18565b6040805133815260208101869052908101829052606081018990526080810188905285906001600160a01b03808d1691908e16907f8f5fb725904dff7292d34df72f578088cca0aa71767d7d82fc40b1b786ef96a79060a00160405180910390a45050505050505050505050565b6000806001600160ff1b03831681613c3a60ff86901c601b61557d565b9050613c488782888561478c565b935093505050935093915050565b6000816004811115613c6a57613c6a615abf565b1415613c735750565b6001816004811115613c8757613c87615abf565b1415613cd05760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a18565b6002816004811115613ce457613ce4615abf565b1415613d325760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a18565b6003816004811115613d4657613d46615abf565b14156110675760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a18565b6001600160a01b038316613de65760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081d185c99d95d60921b6044820152606401610a18565b60008111613e2e5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081d185c99d95d10da185a5b9259605a1b6044820152606401610a18565b613e3b6201518042615566565b60fe541015613e4e574260fe55600060ff555b613e5b6201518042615566565b6001600160a01b038516600090815261010060205260409020541015613e9c576001600160a01b038416600090815261010060205260408120428155600101555b600080613ea98685610c59565b91509150818190613ecd5760405162461bcd60e51b8152600401610a189190615ad5565b508360fe6001016000828254613ee3919061557d565b90915550506001600160a01b0386166000908152610100602052604081206001018054869290613f1490849061557d565b9091555050505050505050565b613f2a816130ae565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060613f6c8361241a565b613fc75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a18565b600080846001600160a01b031684604051613fe29190615ae8565b600060405180830381855af49150503d806000811461401d576040519150601f19603f3d011682016040523d82523d6000602084013e614022565b606091505b50915091506128658282604051806060016040528060278152602001615b4f60279139614846565b805160009061405b57506000919050565b6020820151805160001a9060c0821015614079575060009392505050565b5060019392505050565b8051600090811a608081101561409c5750600092915050565b60b88110806140b7575060c081108015906140b7575060f881105b156140c55750600192915050565b60c08110156140f2576140da600160b86153d0565b6140e79060ff1682615566565b612c1890600161557d565b6140da600160f86153d0565b805180516020820151600092916141149161557d565b836020015110915050919050565b80516000908190811a608081101561413d57600191506141c4565b60b881101561416357614151608082615566565b61415c90600161557d565b91506141c4565b60c08110156141905760b78103600185019450806020036101000a855104600182018101935050506141c4565b60f88110156141a45761415160c082615566565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b60008060006141dd8460200151614083565b905060008185602001516141f1919061557d565b905060008286600001516142059190615566565b9196919550909350505050565b60606000614221602085615518565b90506000614230602086615afa565b61423b9060086154e3565b61424790610100615566565b9050602060008080886001600160401b03811115614267576142676148e8565b6040519080825280601f01601f191660200182016040528015614291576020820181803683370190505b5090508a8a01915087156142bb57818401516001600160fc1b031681850152602090930192600192505b825b868110156142db5782850151828601526020909401936001016142bd565b5083820151851c851b84820152505050505050949350505050565b606060008251600261430891906154e3565b90506000816001600160401b03811115614324576143246148e8565b6040519080825280601f01601f19166020018201604052801561434e576020820181803683370190505b50905060005b84518110156115705760008061439887848151811061437557614375615609565b01602001516001600160f81b031916600481901c916001600160fc1b0390911690565b909250905081846143aa8560026154e3565b815181106143ba576143ba615609565b60200101906001600160f81b031916908160001a90535080846143de8560026154e3565b6143e990600161557d565b815181106143f9576143f9615609565b60200101906001600160f81b031916908160001a9053505050808061441d906157ed565b915050614354565b6060600060018351600261443991906154e3565b6144439190615566565b90506000816001600160401b0381111561445f5761445f6148e8565b6040519080825280601f01601f191660200182016040528015614489576020820181803683370190505b5090508360008151811061449f5761449f615609565b602001015160f81c60f81b816000815181106144bd576144bd615609565b60200101906001600160f81b031916908160001a90535060015b8451811015611570576000806144f887848151811061437557614375615609565b90925090508184600161450c8660026154e3565b6145169190615566565b8151811061452657614526615609565b60200101906001600160f81b031916908160001a905350808461454a8560026154e3565b8151811061455a5761455a615609565b60200101906001600160f81b031916908160001a9053505050808061457e906157ed565b9150506144d7565b8061459057505050565b602081106145c857825182526145a760208461557d565b92506145b460208361557d565b91506145c1602082615566565b9050614590565b8015611ecd57600060016145dd836020615566565b6145e9906101006154d7565b6145f39190615566565b84518451821691191617835250505050565b805160009060151461461657600080fd5b6136f6826132be565b600080600061271060f6600201548661463891906154e3565b6146429190615518565b60f6549091508110156146575760f654614659565b805b60f75490915081111561466e5760f754614670565b805b905061467d600282615518565b9050808461468c57600061468e565b815b92509250509250929050565b610101546001600160a01b0316158015906147245750610101546040516374bf77e960e11b81526001600160a01b039091169063e97eefd2906146e1908490600401614e07565b6020604051808303816000875af1158015614700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147249190615549565b1561106757610101546040516306ee3b9f60e31b81526001600160a01b0390911690633771dcf89061475a908490600401614e07565b600060405180830381600087803b15801561477457600080fd5b505af1925050508015614785575060015b6110675750565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156147b9575060009050600361483d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561480d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166148365760006001925092505061483d565b9150600090505b94509492505050565b60608315614855575081612c18565b612c18838381511561486a5781518083602001fd5b8060405162461bcd60e51b8152600401610a189190615ad5565b604051806060016040528060006001600160a01b0316815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180604001604052806148db6148ae565b8152602001600081525090565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614920576149206148e8565b60405290565b60405160a081016001600160401b0381118282101715614920576149206148e8565b60405160c081016001600160401b0381118282101715614920576149206148e8565b604051601f8201601f191681016001600160401b0381118282101715614992576149926148e8565b604052919050565b60006001600160401b038211156149b3576149b36148e8565b5060051b60200190565b6001600160a01b038116811461106757600080fd5b600082601f8301126149e357600080fd5b813560206149f86149f38361499a565b61496a565b82815260059290921b84018101918181019086841115614a1757600080fd5b8286015b84811015614a3b578035614a2e816149bd565b8352918301918301614a1b565b509695505050505050565b803563ffffffff81168114614a5a57600080fd5b919050565b600060608284031215614a7157600080fd5b614a796148fe565b905081358152602082013560208201526040820135604082015292915050565b801515811461106757600080fd5b600060a08284031215614ab957600080fd5b614ac1614926565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135614af381614a99565b608082015292915050565b8035614a5a816149bd565b60008060008060008060008060006101e08a8c031215614b2857600080fd5b89356001600160401b0380821115614b3f57600080fd5b614b4b8d838e016149d2565b9a5060208c0135995060408c0135915080821115614b6857600080fd5b50614b758c828d016149d2565b975050614b8460608b01614a46565b955060808a0135614b94816149bd565b9450614ba38b60a08c01614a5f565b9350614bb38b6101008c01614aa7565b92506101a08a0135614bc4816149bd565b9150614bd36101c08b01614afe565b90509295985092959850929598565b600060208284031215614bf457600080fd5b5035919050565b600060a08284031215614c0d57600080fd5b612c188383614aa7565b60008060408385031215614c2a57600080fd5b8235614c35816149bd565b946020939093013593505050565b60005b83811015614c5e578181015183820152602001614c46565b8381111561316d5750506000910152565b60008151808452614c87816020860160208601614c43565b601f01601f19169290920160200192915050565b82151581526040602082015260006126d76040830184614c6f565b600060208284031215614cc857600080fd5b8135612c18816149bd565b60008083601f840112614ce557600080fd5b5081356001600160401b03811115614cfc57600080fd5b6020830191508360208260051b8501011115610f9a57600080fd5b600080600060408486031215614d2c57600080fd5b8335925060208401356001600160401b03811115614d4957600080fd5b614d5586828701614cd3565b9497909650939450505050565b6000602080830181845280855180835260408601915060059250604081841b8701018488016000805b84811015614df857898403603f19018652825180518086529089019089860190808a1b87018b01855b82811015614de257601f19898303018452614dd0828651614c6f565b948d0194938d01939150600101614db4565b50988b0198965050509288019250600101614d8b565b50919998505050505050505050565b6001600160a01b0391909116815260200190565b600082601f830112614e2c57600080fd5b81356001600160401b03811115614e4557614e456148e8565b614e58601f8201601f191660200161496a565b818152846020838601011115614e6d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614e9d57600080fd5b8235614ea8816149bd565b915060208301356001600160401b03811115614ec357600080fd5b614ecf85828601614e1b565b9150509250929050565b600082601f830112614eea57600080fd5b81356020614efa6149f38361499a565b82815260059290921b84018101918181019086841115614f1957600080fd5b8286015b84811015614a3b5780356001600160401b03811115614f3c5760008081fd5b614f4a8986838b0101614e1b565b845250918301918301614f1d565b600060a08284031215614f6a57600080fd5b614f72614926565b82358152905060208201356001600160401b0380821115614f9257600080fd5b614f9e85838601614e1b565b60208401526040840135915080821115614fb757600080fd5b614fc385838601614ed9565b6040840152606084013560608401526080840135915080821115614fe657600080fd5b50614ff3848285016149d2565b60808301525092915050565b6000602080838503121561501257600080fd5b82356001600160401b038082111561502957600080fd5b818501915085601f83011261503d57600080fd5b813561504b6149f38261499a565b81815260059190911b8301840190848101908883111561506a57600080fd5b8585015b838110156150a2578035858111156150865760008081fd5b6150948b89838a0101614f58565b84525091860191860161506e565b5098975050505050505050565b9283526020830191909152604082015260600190565b6000606082840312156150d757600080fd5b612c188383614a5f565b6000602082840312156150f357600080fd5b81356001600160401b0381111561510957600080fd5b6126d7848285016149d2565b60008083601f84011261512757600080fd5b5081356001600160401b0381111561513e57600080fd5b602083019150836020828501011115610f9a57600080fd5b6000806000806060858703121561516c57600080fd5b8435615177816149bd565b93506020850135925060408501356001600160401b0381111561519957600080fd5b6151a587828801615115565b95989497509550505050565b600080600080604085870312156151c757600080fd5b84356001600160401b03808211156151de57600080fd5b6151ea88838901614cd3565b9096509450602087013591508082111561520357600080fd5b506151a587828801614cd3565b60006020828403121561522257600080fd5b612c1882614a46565b6000806040838503121561523e57600080fd5b50508035926020909101359150565b60008060006060848603121561526257600080fd5b833561526d816149bd565b95602085013595506040909401359392505050565b6000806000806000806080878903121561529b57600080fd5b863595506020870135945060408701356001600160401b03808211156152c057600080fd5b6152cc8a838b01614cd3565b909650945060608901359150808211156152e557600080fd5b506152f289828a01615115565b979a9699509497509295939492505050565b6000806000806000806080878903121561531d57600080fd5b86356001600160401b038082111561533457600080fd5b9088019060a0828b03121561534857600080fd5b909650602088013595506040880135908082111561536557600080fd5b6153718a838b01614cd3565b9096509450606089013591508082111561538a57600080fd5b506152f289828a01614cd3565b6000602082840312156153a957600080fd5b815160ff81168114612c1857600080fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8416808210156153ea576153ea6153ba565b90039392505050565b600181815b8085111561542e578160001904821115615414576154146153ba565b8085161561542157918102915b93841c93908002906153f8565b509250929050565b600082615445575060016136f6565b81615452575060006136f6565b816001811461546857600281146154725761548e565b60019150506136f6565b60ff841115615483576154836153ba565b50506001821b6136f6565b5060208310610133831016604e8410600b84101617156154b1575081810a6136f6565b6154bb83836153f3565b80600019048211156154cf576154cf6153ba565b029392505050565b6000612c188383615436565b60008160001904831182151516156154fd576154fd6153ba565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261552757615527615502565b500490565b60006020828403121561553e57600080fd5b8151612c18816149bd565b60006020828403121561555b57600080fd5b8151612c1881614a99565b600082821015615578576155786153ba565b500390565b60008219821115615590576155906153ba565b500190565b6020808252602c90820152600080516020615b0f83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615b0f83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261563557600080fd5b9190910192915050565b6000606080833603121561565257600080fd5b61565a6148fe565b83356001600160401b038082111561567157600080fd5b9085019036601f83011261568457600080fd5b813560206156946149f38361499a565b82815260059290921b840181019181810190368411156156b357600080fd5b8286015b8481101561578f578035868111156156cf5760008081fd5b870160c036829003601f19018113156156e85760008081fd5b6156f0614948565b8683013581526040808401358a81111561570a5760008081fd5b615718368a83880101614e1b565b89840152508c8401358a81111561572f5760008081fd5b61573d368a83880101614ed9565b8284015250506080808401358d83015260a080850135828401528385013593508a84111561576d57600091508182fd5b61577b368a86880101614e1b565b9083015250855250509183019183016156b7565b50865250878101359550828611156157a657600080fd5b6157b236878a01614e1b565b8186015250505050604084013560408201528092505050919050565b8381528260208201526060604082015260006128656060830184614c6f565b6000600019821415615801576158016153ba565b5060010190565b84815260006020858184015260408301855182870160005b828110156158455781516001600160a01b031684529284019290840190600101615820565b50505093845290920195945050505050565b6000806040838503121561586a57600080fd5b505080516020909101519092909150565b6020808252600d908201526c189b1bd8dac81d1bdbc81bdb19609a1b604082015260600190565b6000602082840312156158b457600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6020808252600890820152673a3930b739b332b960c11b604082015260600190565b60008060006060848603121561590b57600080fd5b83359250602084013561591d816149bd565b9150604084013561592d81614a99565b809150509250925092565b60008083128015600160ff1b850184121615615956576159566153ba565b6001600160ff1b0384018313811615615971576159716153ba565b50500390565b6000600160ff1b82141561598d5761598d6153ba565b506000190190565b8183823760009101908152919050565b6000808335601e198436030181126159bc57600080fd5b8301803591506001600160401b038211156159d657600080fd5b602001915036819003821315610f9a57600080fd5b6000808335601e19843603018112615a0257600080fd5b8301803591506001600160401b03821115615a1c57600080fd5b6020019150600581901b3603821315610f9a57600080fd5b60006136f63683614f58565b600080600060608486031215615a5557600080fd5b8351925060208401519150604084015161592d81614a99565b604080825283519082018190526000906020906060840190828701845b82811015615ab05781516001600160a01b031684529284019290840190600101615a8b565b50505092019290925292915050565b634e487b7160e01b600052602160045260246000fd5b602081526000612c186020830184614c6f565b60008251615635818460208701614c43565b600082615b0957615b09615502565b50069056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644246d22454f5bd543c70e6ffcca20eed2dcf09d3beef6d39e415385538b02d0a7f7083e3a64a44d5c6f241eebc1447aa155764f7f6eb1508b4ef82dd555e9d68a264697066735822122087416e728c7bfc40380028fcf9c9009b285251247a2baf0551df8c1f1fa9301664736f6c634300080a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
