{
  "_format": "hh-sol-artifact-1",
  "contractName": "MVM_StateCommitmentChain",
  "sourceName": "contracts/MVM/MVM_StateCommitmentChain.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_libAddressManager",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_fraudProofWindow",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_sequencerPublishWindow",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ClaimAlreadyResolved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnregisteredGame",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_batchIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_batchRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_batchSize",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_prevTotalElements",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "StateBatchAppended",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_batchIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_batchRoot",
          "type": "bytes32"
        }
      ],
      "name": "StateBatchDeleted",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_CHAINID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DISPUTE_GAME_FACTORY_NAME",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FRAUD_PROOF_WINDOW",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SEQUENCER_PUBLISH_WINDOW",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "earliestTime",
          "type": "uint256"
        }
      ],
      "name": "_findBatchWithinTimeWindow",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_batch",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "_shouldStartAtElement",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_lastBatchBlockHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_lastBatchBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "appendStateBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "_batch",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "_shouldStartAtElement",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_proposer",
          "type": "string"
        },
        {
          "internalType": "bytes32",
          "name": "_lastBatchBlockHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_lastBatchBlockNumber",
          "type": "uint256"
        }
      ],
      "name": "appendStateBatchByChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "batchLastL2BlockNumbers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "batchTimes",
      "outputs": [
        {
          "internalType": "bytes16",
          "name": "",
          "type": "bytes16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "batches",
      "outputs": [
        {
          "internalType": "contract IChainStorageContainer",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "_batchHeader",
          "type": "tuple"
        }
      ],
      "name": "deleteStateBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "_batchHeader",
          "type": "tuple"
        }
      ],
      "name": "deleteStateBatchByChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "disputedBatches",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        }
      ],
      "name": "findEarliestDisputableBatch",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLastSequencerTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_lastSequencerTimestamp",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        }
      ],
      "name": "getLastSequencerTimestampByChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_lastSequencerTimestamp",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalBatches",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_totalBatches",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        }
      ],
      "name": "getTotalBatchesByChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_totalBatches",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalElements",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_totalElements",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        }
      ],
      "name": "getTotalElementsByChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_totalElements",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "_batchHeader",
          "type": "tuple"
        }
      ],
      "name": "insideFraudProofWindow",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_inside",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "_batchHeader",
          "type": "tuple"
        }
      ],
      "name": "insideFraudProofWindowByChainId",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_inside",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "stateHeaderHash",
          "type": "bytes32"
        }
      ],
      "name": "isDisputedBatch",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "libAddressManager",
      "outputs": [
        {
          "internalType": "contract Lib_AddressManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "name": "resolve",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "stateHeaderHash",
          "type": "bytes32"
        }
      ],
      "name": "saveDisputedBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setFraudProofWindow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_element",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "_batchHeader",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            },
            {
              "internalType": "bytes32[]",
              "name": "siblings",
              "type": "bytes32[]"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainInclusionProof",
          "name": "_proof",
          "type": "tuple"
        }
      ],
      "name": "verifyStateCommitment",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_element",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "_batchHeader",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            },
            {
              "internalType": "bytes32[]",
              "name": "siblings",
              "type": "bytes32[]"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainInclusionProof",
          "name": "_proof",
          "type": "tuple"
        }
      ],
      "name": "verifyStateCommitmentByChainId",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526104406003553480156200001757600080fd5b506040516200322d3803806200322d8339810160408190526200003a9162000067565b600080546001600160a01b0319166001600160a01b039490941693909317909255600155600255620000ac565b6000806000606084860312156200007d57600080fd5b83516001600160a01b03811681146200009557600080fd5b602085015160409095015190969495509392505050565b61317180620000bc6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637fe9b70f11610104578063a0832c03116100a2578063c1c2c96811610071578063c1c2c96814610445578063cfdf677e14610458578063dfd9826914610460578063e561dddc146104a957600080fd5b8063a0832c03146103ee578063ab59f7b814610416578063b8e189ac14610429578063c17b291b1461043c57600080fd5b80638a52e622116100de5780638a52e622146103955780638c7de742146103a85780639418bddd146103bb5780639b9d8324146103ce57600080fd5b80637fe9b70f1461036657806380931e371461037957806381eb62ef1461038c57600080fd5b80635b297172116101715780635fc993dd1161014b5780635fc993dd146103205780636d3454bf146103435780637aa63a86146103565780637ad168a01461035e57600080fd5b80635b297172146102e35780635bbbb7ed146102f65780635cb583741461030d57600080fd5b80632ab65ec7116101ad5780632ab65ec7146102775780633e3cd3261461028a578063461a4478146102bd5780634d69ee57146102d057600080fd5b80630a17d699146101d45780632471e03c146101e9578063299ca47814610232575b600080fd5b6101e76101e2366004612821565b6104b1565b005b6101fc6101f73660046128aa565b61074f565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911681526020015b60405180910390f35b6000546102529073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610229565b6101e761028536600461296d565b610795565b6102ad6102983660046129b4565b60066020526000908152604090205460ff1681565b6040519015158152602001610229565b6102526102cb3660046129cd565b6108f0565b6102ad6102de366004612a71565b61098e565b6101e76102f1366004612ade565b6109a6565b6102ff60035481565b604051908152602001610229565b6102ff61031b3660046129b4565b6109eb565b6102ad61032e3660046129b4565b60009081526006602052604090205460ff1690565b6102ad61035136600461296d565b610a06565b6102ff610a24565b6102ff610a36565b6101e76103743660046129b4565b610a43565b6102ad610387366004612b32565b610cfa565b6102ff60025481565b6102ff6103a33660046129b4565b610dc6565b6102ff6103b63660046129b4565b610de1565b6102ad6103c9366004612ba9565b610e66565b6102ff6103dc3660046129b4565b60056020526000908152604090205481565b6104016103fc3660046129b4565b610f08565b60408051928352602083019190915201610229565b6101e76104243660046129b4565b610f31565b6101e7610437366004612ba9565b610fee565b6102ff60015481565b6104016104533660046128aa565b610ffd565b610252611406565b61049c6040518060400160405280601281526020017f4469737075746547616d65466163746f7279000000000000000000000000000081525081565b6040516102299190612c3a565b6102ff611429565b6104ba86610dc6565b84146105335760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084015b60405180910390fd5b600061053e846108f0565b905061057e6040518060400160405280600b81526020017f426f6e644d616e616765720000000000000000000000000000000000000000008152506108f0565b6040517ff3b96f1c0000000000000000000000000000000000000000000000000000000081526004810189905233602482015273ffffffffffffffffffffffffffffffffffffffff8381166044830152919091169063f3b96f1c90606401602060405180830381865afa1580156105f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061d9190612c4d565b61068f5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f737465640000000000000000000000000000000000606482015260840161052a565b60008651116107065760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e0000000000000000000000000000000000000000000000000000000000606482015260840161052a565b6040805142602082015233918101919091526060810184905260808101839052610746908890889060a00160405160208183030381529060405284611436565b50505050505050565b6004602052816000526040600020818154811061076b57600080fd5b9060005260206000209060029182820401919006601002915091509054906101000a900460801b81565b6107c56107a183611656565b6040516020016107b19190612c6f565b6040516020818303038152906040526108f0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108655760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f6420627920746865204d564d5f467261756456657269666965722e0000000000606482015260840161052a565b61086e81610e66565b6108e2576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e606482015260840161052a565b6108ec82826117b6565b5050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac190610947908590600401612c3a565b602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109889190612cd2565b92915050565b600061099e600354858585610cfa565b949350505050565b60006109b3600354611656565b6040516020016109c39190612cef565b60405160208183030381529060405290506109e460035486868487876104b1565b5050505050565b6000806109f783611ba6565b64ffffffffff16949350505050565b600080610a168360800151611c49565b505050905061099e81611cff565b6000610a31600354610dc6565b905090565b6000610a316003546109eb565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ac09190810190612d30565b9250925092506000610b066040518060400160405280601281526020017f4469737075746547616d65466163746f727900000000000000000000000000008152506108f0565b73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b8152600401610b4293929190612dcf565b6040805180830381865afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190612dfd565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bea576040517f6b0f689100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526006602052604090205460ff1615610c33576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca49190612e73565b6002811115610cb557610cb5612e44565b03610cf257600086815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b505050505050565b6000610d068584611d8d565b610d525760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e0000000000000000000000604482015260640161052a565b610d6f836020015185846000015185602001518760400151611e43565b610dbb5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e0000000000000000604482015260640161052a565b506001949350505050565b600080610dd283611ba6565b5064ffffffffff169392505050565b6000610deb611406565b73ffffffffffffffffffffffffffffffffffffffff1663576f2588836040518263ffffffff1660e01b8152600401610e2591815260200190565b602060405180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109889190612e94565b600080610e768360800151611c49565b505050905080600003610ef15760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b4260015482610f009190612edc565b119392505050565b600080600060015442610f1b9190612ef4565b9050610f278482610ffd565b9250925050915091565b610f6f6040518060400160405280600d81526020017f4d455449535f4d414e41474552000000000000000000000000000000000000008152506108f0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe95760405162461bcd60e51b815260206004820152600b60248201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015260640161052a565b600155565b610ffa60035482610795565b50565b600082815260046020526040812080548291906110825760405162461bcd60e51b815260206004820152602960248201527f4e6f2064697370757461626c6520626174636820686173206265656e2061707060448201527f656e646564207965740000000000000000000000000000000000000000000000606482015260840161052a565b8054600090819061109590600190612ef4565b9050600060408483815481106110ad576110ad612f0b565b90600052602060002090600291828204019190066010029054906101000a900460801b60801c6fffffffffffffffffffffffffffffffff16901c6fffffffffffffffffffffffffffffffff169050600060408560008154811061111257611112612f0b565b6000918252602090912060028204015460019091166010026101000a90046fffffffffffffffffffffffffffffffff90811690911c1690508188111561119a5760405162461bcd60e51b815260206004820152601360248201527f4e6f20626174636820746f206469737075746500000000000000000000000000604482015260640161052a565b8088116111aa5760009350611251565b6000835b8082101561124d57600060026111c48484612ef4565b6111ce9190612f69565b6111d89084612edc565b9050600060408983815481106111f0576111f0612f0b565b6000918252602090912060028204015460019091166010026101000a90046fffffffffffffffffffffffffffffffff90811690911c1690508b8110156112425761123b826001612edc565b9350611246565b8192505b50506111ae565b5093505b600085858154811061126557611265612f0b565b60009182526020822060028204015460019091166010026101000a900467ffffffffffffffff169150611296611406565b6040517f67d18b9b000000000000000000000000000000000000000000000000000000008152600481018d90526024810184905273ffffffffffffffffffffffffffffffffffffffff91909116906367d18b9b90604401602060405180830381865afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190612e94565b90505b60008181526006602052604090205460ff16156113e657611350611406565b73ffffffffffffffffffffffffffffffffffffffff166367d18b9b8c61137585612f7d565b9450846040518363ffffffff1660e01b815260040161139e929190918252602082015260400190565b602060405180830381865afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190612e94565b9050611331565b600081815260056020526040902054909b909a5098505050505050505050565b6000610a3160405180606001604052806021815260200161311b602191396108f0565b6000610a31600354610de1565b60008061144286611ba6565b9150915042905060006040518060a0016040528061145f89610de1565b815260200161146d886120b0565b8152602001875181526020018464ffffffffff16815260200186815250905080600001517fbaa1d762384057169afd12b625998a5a7ed502c2e229acdbead30f3f6496399d8883602001518460400151856060015186608001516040516114d8959493929190612f97565b60405180910390a260006114eb82612593565b90506114f5611406565b73ffffffffffffffffffffffffffffffffffffffff1663e6e436c08983611537866040015187606001516115299190612edc565b602889811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526004810193909352602483019190915264ffffffffff19166044820152606401600060405180830381600087803b15801561159d57600080fd5b505af11580156115b1573d6000803e3d6000fd5b5050506000898152600460209081526040808320865181546001818101845583875294909520600286040180546fffffffffffffffffffffffffffffffff9283166cffffffffff00000000000000008c871b1617601097909616969096026101000a948502919094021990941693909317909155840151606085015191925061163991612edc565b600092835260056020526040909220919091555050505050505050565b60608160000361169957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156116c357806116ad81612f7d565b91506116bc9050600a83612f69565b915061169d565b60008167ffffffffffffffff8111156116de576116de6126bb565b6040519080825280601f01601f191660200182016040528015611708576020820181803683370190505b509050815b85156117ad5761171e600182612ef4565b9050600061172d600a88612f69565b61173890600a612fc2565b6117429088612ef4565b61174d906030612fe1565b905060008160f81b90508084848151811061176a5761176a612f0b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506117a4600a89612f69565b9750505061170d565b50949350505050565b6117be611406565b73ffffffffffffffffffffffffffffffffffffffff1663576f2588836040518263ffffffff1660e01b81526004016117f891815260200190565b602060405180830381865afa158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190612e94565b8151106118885760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e000000000000000000000000604482015260640161052a565b6118928282611d8d565b6118de5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e0000000000000000000000604482015260640161052a565b608081608001515110611aa557600081608001518060200190518101906119059190613006565b505050905060006119168483610ffd565b509050600061192484612593565b905081811461199b5760405162461bcd60e51b815260206004820152603360248201527f416e63686f7265642062617463682068656164657220646f6573206e6f74206d60448201527f6174636820746865207375626d69747465642e00000000000000000000000000606482015260840161052a565b600081815260056020908152604080832083905587835260049091528120805490919081906119cc90600190612ef4565b90505b86600001518382815481106119e6576119e6612f0b565b6000918252602090912060028204015460019091166010026101000a900467ffffffffffffffff1610611a2357611a1c82612f7d565b9150611a28565b611a38565b611a3181613044565b90506119cf565b5060005b81811015611a9e5782805480611a5457611a5461305b565b60008281526020902060026000199092019182040180546fffffffffffffffffffffffffffffffff601060018516026101000a02191690559055611a9781612f7d565b9050611a3c565b5050505050505b611aad611406565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163bc05257691859160281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526004810193909352602483019190915264ffffffffff19166044820152606401600060405180830381600087803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b5050505080600001517f6e9c082632d809680ee6227e58afd9a7c24ee8a43d61577b2e98f9e185fc630d838360200151604051611b9a929190918252602082015260400190565b60405180910390a25050565b6000806000611bb3611406565b73ffffffffffffffffffffffffffffffffffffffff166324a49415856040518263ffffffff1660e01b8152600401611bed91815260200190565b602060405180830381865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e919061308a565b64ffffffffff602882901c169560509190911c945092505050565b6000806000806000806000808851604003611c7c5788806020019051810190611c7291906130b2565b9094509250611cf0565b8851608003611ca85788806020019051810190611c999190613006565b92965090945092509050611cf0565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c69642065787472612064617461206c656e67746800000000000000604482015260640161052a565b92989197509550909350915050565b600081600003611d775760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b4260015483611d869190612edc565b1192915050565b6000611d97611406565b82516040517f67d18b9b00000000000000000000000000000000000000000000000000000000815260048101869052602481019190915273ffffffffffffffffffffffffffffffffffffffff91909116906367d18b9b90604401602060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e329190612e94565b611e3b83612593565b149392505050565b6000808211611eba5760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e000000000000000000606482015260840161052a565b818410611f2e5760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e00000000000000000000000000000000000000000000000000000000606482015260840161052a565b611f37826125d9565b835114611fd25760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a40161052a565b8460005b84518110156120a3578560011660010361203c57848181518110611ffc57611ffc612f0b565b60200260200101518260405160200161201f929190918252602082015260400190565b60405160208183030381529060405280519060200120915061208a565b8185828151811061204f5761204f612f0b565b6020026020010151604051602001612071929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c948061209b81612f7d565b915050611fd6565b5090951495945050505050565b6000808251116121285760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e000000000000000000000000606482015260840161052a565b8151600103612153578160008151811061214457612144612f0b565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b600184111561256957612404600285612f69565b91506124116002856130d7565b600114905060005b828110156124bd578a61242d826002612fc2565b8151811061243d5761243d612f0b565b602002602001015196508a8160026124559190612fc2565b612460906001612edc565b8151811061247057612470612f0b565b6020026020010151955086602089015285604089015287805190602001208b82815181106124a0576124a0612f0b565b6020908102919091010152806124b581612f7d565b915050612419565b50801561253957896124d0600186612ef4565b815181106124e0576124e0612f0b565b602002602001015195508783601081106124fc576124fc612f0b565b602002015160001b945085602088015284604088015286805190602001208a838151811061252c5761252c612f0b565b6020026020010181815250505b80612545576000612548565b60015b6125559060ff1683612edc565b93508261256181612f7d565b9350506123f0565b8960008151811061257c5761257c612f0b565b602002602001015198505050505050505050919050565b600081602001518260400151836060015184608001516040516020016125bc94939291906130eb565b604051602081830303815290604052805190602001209050919050565b60008082116126505760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e00000000000000000000000000000000606482015260840161052a565b8160010361266057506000919050565b81600060805b6001811061269e578061267c600180831b612ef4565b901b8316156126965761268f8183612edc565b92811c9291505b60011c612666565b506001811b84146126b45761099e600182612edc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612713576127136126bb565b604052919050565b600082601f83011261272c57600080fd5b8135602067ffffffffffffffff821115612748576127486126bb565b8160051b6127578282016126ea565b928352848101820192828101908785111561277157600080fd5b83870192505b8483101561279057823582529183019190830190612777565b979650505050505050565b600067ffffffffffffffff8211156127b5576127b56126bb565b50601f01601f191660200190565b60006127d66127d18461279b565b6126ea565b90508281528383830111156127ea57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261281257600080fd5b6126b4838335602085016127c3565b60008060008060008060c0878903121561283a57600080fd5b86359550602087013567ffffffffffffffff8082111561285957600080fd5b6128658a838b0161271b565b965060408901359550606089013591508082111561288257600080fd5b5061288f89828a01612801565b9350506080870135915060a087013590509295509295509295565b600080604083850312156128bd57600080fd5b50508035926020909101359150565b600060a082840312156128de57600080fd5b60405160a0810167ffffffffffffffff8282108183111715612902576129026126bb565b8160405282935084358352602085013560208401526040850135604084015260608501356060840152608085013591508082111561293f57600080fd5b508301601f8101851361295157600080fd5b612960858235602084016127c3565b6080830152505092915050565b6000806040838503121561298057600080fd5b82359150602083013567ffffffffffffffff81111561299e57600080fd5b6129aa858286016128cc565b9150509250929050565b6000602082840312156129c657600080fd5b5035919050565b6000602082840312156129df57600080fd5b813567ffffffffffffffff8111156129f657600080fd5b61099e84828501612801565b600060408284031215612a1457600080fd5b6040516040810167ffffffffffffffff8282108183111715612a3857612a386126bb565b81604052829350843583526020850135915080821115612a5757600080fd5b50612a648582860161271b565b6020830152505092915050565b600080600060608486031215612a8657600080fd5b83359250602084013567ffffffffffffffff80821115612aa557600080fd5b612ab1878388016128cc565b93506040860135915080821115612ac757600080fd5b50612ad486828701612a02565b9150509250925092565b60008060008060808587031215612af457600080fd5b843567ffffffffffffffff811115612b0b57600080fd5b612b178782880161271b565b97602087013597506040870135966060013595509350505050565b60008060008060808587031215612b4857600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115612b6e57600080fd5b612b7a888389016128cc565b93506060870135915080821115612b9057600080fd5b50612b9d87828801612a02565b91505092959194509250565b600060208284031215612bbb57600080fd5b813567ffffffffffffffff811115612bd257600080fd5b61099e848285016128cc565b60005b83811015612bf9578181015183820152602001612be1565b83811115612c08576000848401525b50505050565b60008151808452612c26816020860160208601612bde565b601f01601f19169290920160200192915050565b6020815260006126b46020830184612c0e565b600060208284031215612c5f57600080fd5b815180151581146126b457600080fd5b60008251612c81818460208701612bde565b7f5f4d564d5f467261756456657269666965720000000000000000000000000000920191825250601201919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b600060208284031215612ce457600080fd5b81516126b481612cb0565b60008251612d01818460208701612bde565b7f5f4d564d5f50726f706f73657200000000000000000000000000000000000000920191825250600d01919050565b600080600060608486031215612d4557600080fd5b835163ffffffff81168114612d5957600080fd5b60208501516040860151919450925067ffffffffffffffff811115612d7d57600080fd5b8401601f81018613612d8e57600080fd5b8051612d9c6127d18261279b565b818152876020838501011115612db157600080fd5b612dc2826020830160208601612bde565b8093505050509250925092565b63ffffffff84168152826020820152606060408201526000612df46060830184612c0e565b95945050505050565b60008060408385031215612e1057600080fd5b8251612e1b81612cb0565b602084015190925067ffffffffffffffff81168114612e3957600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215612e8557600080fd5b8151600381106126b457600080fd5b600060208284031215612ea657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612eef57612eef612ead565b500190565b600082821015612f0657612f06612ead565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612f7857612f78612f3a565b500490565b60006000198203612f9057612f90612ead565b5060010190565b85815284602082015283604082015282606082015260a06080820152600061279060a0830184612c0e565b6000816000190483118215151615612fdc57612fdc612ead565b500290565b600060ff821660ff84168060ff03821115612ffe57612ffe612ead565b019392505050565b6000806000806080858703121561301c57600080fd5b84519350602085015161302e81612cb0565b6040860151606090960151949790965092505050565b60008161305357613053612ead565b506000190190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006020828403121561309c57600080fd5b815164ffffffffff19811681146126b457600080fd5b600080604083850312156130c557600080fd5b825191506020830151612e3981612cb0565b6000826130e6576130e6612f3a565b500690565b8481528360208201528260408201526080606082015260006131106080830184612c0e565b969550505050505056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a264697066735822122010f98c40deb950d7a6fba0804ae97170373197f6415aebd8d97d1b3dd20713bf64736f6c634300080f0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637fe9b70f11610104578063a0832c03116100a2578063c1c2c96811610071578063c1c2c96814610445578063cfdf677e14610458578063dfd9826914610460578063e561dddc146104a957600080fd5b8063a0832c03146103ee578063ab59f7b814610416578063b8e189ac14610429578063c17b291b1461043c57600080fd5b80638a52e622116100de5780638a52e622146103955780638c7de742146103a85780639418bddd146103bb5780639b9d8324146103ce57600080fd5b80637fe9b70f1461036657806380931e371461037957806381eb62ef1461038c57600080fd5b80635b297172116101715780635fc993dd1161014b5780635fc993dd146103205780636d3454bf146103435780637aa63a86146103565780637ad168a01461035e57600080fd5b80635b297172146102e35780635bbbb7ed146102f65780635cb583741461030d57600080fd5b80632ab65ec7116101ad5780632ab65ec7146102775780633e3cd3261461028a578063461a4478146102bd5780634d69ee57146102d057600080fd5b80630a17d699146101d45780632471e03c146101e9578063299ca47814610232575b600080fd5b6101e76101e2366004612821565b6104b1565b005b6101fc6101f73660046128aa565b61074f565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911681526020015b60405180910390f35b6000546102529073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610229565b6101e761028536600461296d565b610795565b6102ad6102983660046129b4565b60066020526000908152604090205460ff1681565b6040519015158152602001610229565b6102526102cb3660046129cd565b6108f0565b6102ad6102de366004612a71565b61098e565b6101e76102f1366004612ade565b6109a6565b6102ff60035481565b604051908152602001610229565b6102ff61031b3660046129b4565b6109eb565b6102ad61032e3660046129b4565b60009081526006602052604090205460ff1690565b6102ad61035136600461296d565b610a06565b6102ff610a24565b6102ff610a36565b6101e76103743660046129b4565b610a43565b6102ad610387366004612b32565b610cfa565b6102ff60025481565b6102ff6103a33660046129b4565b610dc6565b6102ff6103b63660046129b4565b610de1565b6102ad6103c9366004612ba9565b610e66565b6102ff6103dc3660046129b4565b60056020526000908152604090205481565b6104016103fc3660046129b4565b610f08565b60408051928352602083019190915201610229565b6101e76104243660046129b4565b610f31565b6101e7610437366004612ba9565b610fee565b6102ff60015481565b6104016104533660046128aa565b610ffd565b610252611406565b61049c6040518060400160405280601281526020017f4469737075746547616d65466163746f7279000000000000000000000000000081525081565b6040516102299190612c3a565b6102ff611429565b6104ba86610dc6565b84146105335760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084015b60405180910390fd5b600061053e846108f0565b905061057e6040518060400160405280600b81526020017f426f6e644d616e616765720000000000000000000000000000000000000000008152506108f0565b6040517ff3b96f1c0000000000000000000000000000000000000000000000000000000081526004810189905233602482015273ffffffffffffffffffffffffffffffffffffffff8381166044830152919091169063f3b96f1c90606401602060405180830381865afa1580156105f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061d9190612c4d565b61068f5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f737465640000000000000000000000000000000000606482015260840161052a565b60008651116107065760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e0000000000000000000000000000000000000000000000000000000000606482015260840161052a565b6040805142602082015233918101919091526060810184905260808101839052610746908890889060a00160405160208183030381529060405284611436565b50505050505050565b6004602052816000526040600020818154811061076b57600080fd5b9060005260206000209060029182820401919006601002915091509054906101000a900460801b81565b6107c56107a183611656565b6040516020016107b19190612c6f565b6040516020818303038152906040526108f0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108655760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f6420627920746865204d564d5f467261756456657269666965722e0000000000606482015260840161052a565b61086e81610e66565b6108e2576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e606482015260840161052a565b6108ec82826117b6565b5050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac190610947908590600401612c3a565b602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109889190612cd2565b92915050565b600061099e600354858585610cfa565b949350505050565b60006109b3600354611656565b6040516020016109c39190612cef565b60405160208183030381529060405290506109e460035486868487876104b1565b5050505050565b6000806109f783611ba6565b64ffffffffff16949350505050565b600080610a168360800151611c49565b505050905061099e81611cff565b6000610a31600354610dc6565b905090565b6000610a316003546109eb565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ac09190810190612d30565b9250925092506000610b066040518060400160405280601281526020017f4469737075746547616d65466163746f727900000000000000000000000000008152506108f0565b73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b8152600401610b4293929190612dcf565b6040805180830381865afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190612dfd565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bea576040517f6b0f689100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526006602052604090205460ff1615610c33576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca49190612e73565b6002811115610cb557610cb5612e44565b03610cf257600086815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b505050505050565b6000610d068584611d8d565b610d525760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e0000000000000000000000604482015260640161052a565b610d6f836020015185846000015185602001518760400151611e43565b610dbb5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e0000000000000000604482015260640161052a565b506001949350505050565b600080610dd283611ba6565b5064ffffffffff169392505050565b6000610deb611406565b73ffffffffffffffffffffffffffffffffffffffff1663576f2588836040518263ffffffff1660e01b8152600401610e2591815260200190565b602060405180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109889190612e94565b600080610e768360800151611c49565b505050905080600003610ef15760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b4260015482610f009190612edc565b119392505050565b600080600060015442610f1b9190612ef4565b9050610f278482610ffd565b9250925050915091565b610f6f6040518060400160405280600d81526020017f4d455449535f4d414e41474552000000000000000000000000000000000000008152506108f0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe95760405162461bcd60e51b815260206004820152600b60248201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015260640161052a565b600155565b610ffa60035482610795565b50565b600082815260046020526040812080548291906110825760405162461bcd60e51b815260206004820152602960248201527f4e6f2064697370757461626c6520626174636820686173206265656e2061707060448201527f656e646564207965740000000000000000000000000000000000000000000000606482015260840161052a565b8054600090819061109590600190612ef4565b9050600060408483815481106110ad576110ad612f0b565b90600052602060002090600291828204019190066010029054906101000a900460801b60801c6fffffffffffffffffffffffffffffffff16901c6fffffffffffffffffffffffffffffffff169050600060408560008154811061111257611112612f0b565b6000918252602090912060028204015460019091166010026101000a90046fffffffffffffffffffffffffffffffff90811690911c1690508188111561119a5760405162461bcd60e51b815260206004820152601360248201527f4e6f20626174636820746f206469737075746500000000000000000000000000604482015260640161052a565b8088116111aa5760009350611251565b6000835b8082101561124d57600060026111c48484612ef4565b6111ce9190612f69565b6111d89084612edc565b9050600060408983815481106111f0576111f0612f0b565b6000918252602090912060028204015460019091166010026101000a90046fffffffffffffffffffffffffffffffff90811690911c1690508b8110156112425761123b826001612edc565b9350611246565b8192505b50506111ae565b5093505b600085858154811061126557611265612f0b565b60009182526020822060028204015460019091166010026101000a900467ffffffffffffffff169150611296611406565b6040517f67d18b9b000000000000000000000000000000000000000000000000000000008152600481018d90526024810184905273ffffffffffffffffffffffffffffffffffffffff91909116906367d18b9b90604401602060405180830381865afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190612e94565b90505b60008181526006602052604090205460ff16156113e657611350611406565b73ffffffffffffffffffffffffffffffffffffffff166367d18b9b8c61137585612f7d565b9450846040518363ffffffff1660e01b815260040161139e929190918252602082015260400190565b602060405180830381865afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190612e94565b9050611331565b600081815260056020526040902054909b909a5098505050505050505050565b6000610a3160405180606001604052806021815260200161311b602191396108f0565b6000610a31600354610de1565b60008061144286611ba6565b9150915042905060006040518060a0016040528061145f89610de1565b815260200161146d886120b0565b8152602001875181526020018464ffffffffff16815260200186815250905080600001517fbaa1d762384057169afd12b625998a5a7ed502c2e229acdbead30f3f6496399d8883602001518460400151856060015186608001516040516114d8959493929190612f97565b60405180910390a260006114eb82612593565b90506114f5611406565b73ffffffffffffffffffffffffffffffffffffffff1663e6e436c08983611537866040015187606001516115299190612edc565b602889811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526004810193909352602483019190915264ffffffffff19166044820152606401600060405180830381600087803b15801561159d57600080fd5b505af11580156115b1573d6000803e3d6000fd5b5050506000898152600460209081526040808320865181546001818101845583875294909520600286040180546fffffffffffffffffffffffffffffffff9283166cffffffffff00000000000000008c871b1617601097909616969096026101000a948502919094021990941693909317909155840151606085015191925061163991612edc565b600092835260056020526040909220919091555050505050505050565b60608160000361169957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156116c357806116ad81612f7d565b91506116bc9050600a83612f69565b915061169d565b60008167ffffffffffffffff8111156116de576116de6126bb565b6040519080825280601f01601f191660200182016040528015611708576020820181803683370190505b509050815b85156117ad5761171e600182612ef4565b9050600061172d600a88612f69565b61173890600a612fc2565b6117429088612ef4565b61174d906030612fe1565b905060008160f81b90508084848151811061176a5761176a612f0b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506117a4600a89612f69565b9750505061170d565b50949350505050565b6117be611406565b73ffffffffffffffffffffffffffffffffffffffff1663576f2588836040518263ffffffff1660e01b81526004016117f891815260200190565b602060405180830381865afa158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190612e94565b8151106118885760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e000000000000000000000000604482015260640161052a565b6118928282611d8d565b6118de5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e0000000000000000000000604482015260640161052a565b608081608001515110611aa557600081608001518060200190518101906119059190613006565b505050905060006119168483610ffd565b509050600061192484612593565b905081811461199b5760405162461bcd60e51b815260206004820152603360248201527f416e63686f7265642062617463682068656164657220646f6573206e6f74206d60448201527f6174636820746865207375626d69747465642e00000000000000000000000000606482015260840161052a565b600081815260056020908152604080832083905587835260049091528120805490919081906119cc90600190612ef4565b90505b86600001518382815481106119e6576119e6612f0b565b6000918252602090912060028204015460019091166010026101000a900467ffffffffffffffff1610611a2357611a1c82612f7d565b9150611a28565b611a38565b611a3181613044565b90506119cf565b5060005b81811015611a9e5782805480611a5457611a5461305b565b60008281526020902060026000199092019182040180546fffffffffffffffffffffffffffffffff601060018516026101000a02191690559055611a9781612f7d565b9050611a3c565b5050505050505b611aad611406565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163bc05257691859160281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526004810193909352602483019190915264ffffffffff19166044820152606401600060405180830381600087803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b5050505080600001517f6e9c082632d809680ee6227e58afd9a7c24ee8a43d61577b2e98f9e185fc630d838360200151604051611b9a929190918252602082015260400190565b60405180910390a25050565b6000806000611bb3611406565b73ffffffffffffffffffffffffffffffffffffffff166324a49415856040518263ffffffff1660e01b8152600401611bed91815260200190565b602060405180830381865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e919061308a565b64ffffffffff602882901c169560509190911c945092505050565b6000806000806000806000808851604003611c7c5788806020019051810190611c7291906130b2565b9094509250611cf0565b8851608003611ca85788806020019051810190611c999190613006565b92965090945092509050611cf0565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c69642065787472612064617461206c656e67746800000000000000604482015260640161052a565b92989197509550909350915050565b600081600003611d775760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b4260015483611d869190612edc565b1192915050565b6000611d97611406565b82516040517f67d18b9b00000000000000000000000000000000000000000000000000000000815260048101869052602481019190915273ffffffffffffffffffffffffffffffffffffffff91909116906367d18b9b90604401602060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e329190612e94565b611e3b83612593565b149392505050565b6000808211611eba5760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e000000000000000000606482015260840161052a565b818410611f2e5760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e00000000000000000000000000000000000000000000000000000000606482015260840161052a565b611f37826125d9565b835114611fd25760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a40161052a565b8460005b84518110156120a3578560011660010361203c57848181518110611ffc57611ffc612f0b565b60200260200101518260405160200161201f929190918252602082015260400190565b60405160208183030381529060405280519060200120915061208a565b8185828151811061204f5761204f612f0b565b6020026020010151604051602001612071929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c948061209b81612f7d565b915050611fd6565b5090951495945050505050565b6000808251116121285760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e000000000000000000000000606482015260840161052a565b8151600103612153578160008151811061214457612144612f0b565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b600184111561256957612404600285612f69565b91506124116002856130d7565b600114905060005b828110156124bd578a61242d826002612fc2565b8151811061243d5761243d612f0b565b602002602001015196508a8160026124559190612fc2565b612460906001612edc565b8151811061247057612470612f0b565b6020026020010151955086602089015285604089015287805190602001208b82815181106124a0576124a0612f0b565b6020908102919091010152806124b581612f7d565b915050612419565b50801561253957896124d0600186612ef4565b815181106124e0576124e0612f0b565b602002602001015195508783601081106124fc576124fc612f0b565b602002015160001b945085602088015284604088015286805190602001208a838151811061252c5761252c612f0b565b6020026020010181815250505b80612545576000612548565b60015b6125559060ff1683612edc565b93508261256181612f7d565b9350506123f0565b8960008151811061257c5761257c612f0b565b602002602001015198505050505050505050919050565b600081602001518260400151836060015184608001516040516020016125bc94939291906130eb565b604051602081830303815290604052805190602001209050919050565b60008082116126505760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e00000000000000000000000000000000606482015260840161052a565b8160010361266057506000919050565b81600060805b6001811061269e578061267c600180831b612ef4565b901b8316156126965761268f8183612edc565b92811c9291505b60011c612666565b506001811b84146126b45761099e600182612edc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612713576127136126bb565b604052919050565b600082601f83011261272c57600080fd5b8135602067ffffffffffffffff821115612748576127486126bb565b8160051b6127578282016126ea565b928352848101820192828101908785111561277157600080fd5b83870192505b8483101561279057823582529183019190830190612777565b979650505050505050565b600067ffffffffffffffff8211156127b5576127b56126bb565b50601f01601f191660200190565b60006127d66127d18461279b565b6126ea565b90508281528383830111156127ea57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261281257600080fd5b6126b4838335602085016127c3565b60008060008060008060c0878903121561283a57600080fd5b86359550602087013567ffffffffffffffff8082111561285957600080fd5b6128658a838b0161271b565b965060408901359550606089013591508082111561288257600080fd5b5061288f89828a01612801565b9350506080870135915060a087013590509295509295509295565b600080604083850312156128bd57600080fd5b50508035926020909101359150565b600060a082840312156128de57600080fd5b60405160a0810167ffffffffffffffff8282108183111715612902576129026126bb565b8160405282935084358352602085013560208401526040850135604084015260608501356060840152608085013591508082111561293f57600080fd5b508301601f8101851361295157600080fd5b612960858235602084016127c3565b6080830152505092915050565b6000806040838503121561298057600080fd5b82359150602083013567ffffffffffffffff81111561299e57600080fd5b6129aa858286016128cc565b9150509250929050565b6000602082840312156129c657600080fd5b5035919050565b6000602082840312156129df57600080fd5b813567ffffffffffffffff8111156129f657600080fd5b61099e84828501612801565b600060408284031215612a1457600080fd5b6040516040810167ffffffffffffffff8282108183111715612a3857612a386126bb565b81604052829350843583526020850135915080821115612a5757600080fd5b50612a648582860161271b565b6020830152505092915050565b600080600060608486031215612a8657600080fd5b83359250602084013567ffffffffffffffff80821115612aa557600080fd5b612ab1878388016128cc565b93506040860135915080821115612ac757600080fd5b50612ad486828701612a02565b9150509250925092565b60008060008060808587031215612af457600080fd5b843567ffffffffffffffff811115612b0b57600080fd5b612b178782880161271b565b97602087013597506040870135966060013595509350505050565b60008060008060808587031215612b4857600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115612b6e57600080fd5b612b7a888389016128cc565b93506060870135915080821115612b9057600080fd5b50612b9d87828801612a02565b91505092959194509250565b600060208284031215612bbb57600080fd5b813567ffffffffffffffff811115612bd257600080fd5b61099e848285016128cc565b60005b83811015612bf9578181015183820152602001612be1565b83811115612c08576000848401525b50505050565b60008151808452612c26816020860160208601612bde565b601f01601f19169290920160200192915050565b6020815260006126b46020830184612c0e565b600060208284031215612c5f57600080fd5b815180151581146126b457600080fd5b60008251612c81818460208701612bde565b7f5f4d564d5f467261756456657269666965720000000000000000000000000000920191825250601201919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b600060208284031215612ce457600080fd5b81516126b481612cb0565b60008251612d01818460208701612bde565b7f5f4d564d5f50726f706f73657200000000000000000000000000000000000000920191825250600d01919050565b600080600060608486031215612d4557600080fd5b835163ffffffff81168114612d5957600080fd5b60208501516040860151919450925067ffffffffffffffff811115612d7d57600080fd5b8401601f81018613612d8e57600080fd5b8051612d9c6127d18261279b565b818152876020838501011115612db157600080fd5b612dc2826020830160208601612bde565b8093505050509250925092565b63ffffffff84168152826020820152606060408201526000612df46060830184612c0e565b95945050505050565b60008060408385031215612e1057600080fd5b8251612e1b81612cb0565b602084015190925067ffffffffffffffff81168114612e3957600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215612e8557600080fd5b8151600381106126b457600080fd5b600060208284031215612ea657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612eef57612eef612ead565b500190565b600082821015612f0657612f06612ead565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612f7857612f78612f3a565b500490565b60006000198203612f9057612f90612ead565b5060010190565b85815284602082015283604082015282606082015260a06080820152600061279060a0830184612c0e565b6000816000190483118215151615612fdc57612fdc612ead565b500290565b600060ff821660ff84168060ff03821115612ffe57612ffe612ead565b019392505050565b6000806000806080858703121561301c57600080fd5b84519350602085015161302e81612cb0565b6040860151606090960151949790965092505050565b60008161305357613053612ead565b506000190190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006020828403121561309c57600080fd5b815164ffffffffff19811681146126b457600080fd5b600080604083850312156130c557600080fd5b825191506020830151612e3981612cb0565b6000826130e6576130e6612f3a565b500690565b8481528360208201528260408201526080606082015260006131106080830184612c0e565b969550505050505056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a264697066735822122010f98c40deb950d7a6fba0804ae97170373197f6415aebd8d97d1b3dd20713bf64736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
