{
  "_format": "hh-sol-artifact-1",
  "contractName": "MVM_Verifier",
  "sourceName": "contracts/MVM/MVM_Verifier.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Claim",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "enum MVM_Verifier.SETTLEMENT",
          "name": "result",
          "type": "uint8"
        }
      ],
      "name": "Finalize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "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"
            }
          ],
          "indexed": false,
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "header",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "NewChallenge",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakeLost",
          "type": "uint256"
        }
      ],
      "name": "Penalize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Reward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "chainID",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "seq",
          "type": "address"
        }
      ],
      "name": "SlashSequencer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "verifier",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Stake",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "verifier",
          "type": "address"
        }
      ],
      "name": "Verify1",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "verifier",
          "type": "address"
        }
      ],
      "name": "Verify2",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CONFIG_OWNER_KEY",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "absence_strikes",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "activeChallenges",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "chain_under_challenge",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "challenges",
      "outputs": [
        {
          "internalType": "address",
          "name": "challenger",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "chainID",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "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": "header",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "numQualifiedVerifiers",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "numVerifiers",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "done",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "consensus_strikes",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "key",
          "type": "bytes"
        }
      ],
      "name": "decrypt",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "depositSeqStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableWhiteList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "key",
          "type": "bytes"
        }
      ],
      "name": "encrypt",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "elements",
          "type": "bytes32[]"
        }
      ],
      "name": "getMerkleRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "isSufficientlyStaked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "verifier",
          "type": "address"
        }
      ],
      "name": "isWhiteListed",
      "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": [],
      "name": "metis",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "header",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "proposedHash",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "keyhash",
          "type": "bytes"
        }
      ],
      "name": "newChallenge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numQualifiedVerifiers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "seqStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minStake",
          "type": "uint256"
        }
      ],
      "name": "setMinStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "absence_threshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fail_threshold",
          "type": "uint256"
        }
      ],
      "name": "setThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setVerifyWindow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "verifier",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "allowed",
          "type": "bool"
        }
      ],
      "name": "setWhiteList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        }
      ],
      "name": "verifierStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "verifier_stakes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "verifiers",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "cIndex",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "hash",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "keyhash",
          "type": "bytes"
        }
      ],
      "name": "verify1",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "cIndex",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "key",
          "type": "bytes"
        }
      ],
      "name": "verify2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "verifyWindow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawSeqStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405262015180600e556002601355600460145534801561002157600080fd5b50600080546001600160a01b03191690556150d8806100416000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80636f9170f611610145578063b4b6de38116100bd578063e59745541161008c578063ef53b04111610071578063ef53b0411461056c578063fca0fd6c1461057f578063ffa444ec1461058857600080fd5b8063e597455414610529578063eab0fca31461053c57600080fd5b8063b4b6de38146104f2578063b646c02514610505578063b9c362091461050e578063dcd836161461052157600080fd5b8063939f59fe1161011457806398fe9dfb116100f957806398fe9dfb146104a95780639b19251a146104bc578063ac1eff68146104df57600080fd5b8063939f59fe14610473578063966df42b1461048657600080fd5b80636f9170f6146104035780638c80fd90146104265780638d14e127146104395780638f1d37761461044c57600080fd5b8063461a4478116101d857806353dec0e8116101a75780635cc38c021161018c5780635cc38c02146103945780636593363f146103b4578063669fdeb5146103c757600080fd5b806353dec0e81461036e5780635bf0f25d1461038157600080fd5b8063461a4478146103375780634869bfb61461034a5780634d4127af1461035d5780634e71d92d1461036657600080fd5b80632e1a7d4d116102145780632e1a7d4d146102d1578063375b3c0a146102e6578063383e5e69146102ef57806340a89eae1461030257600080fd5b8063015cfec7146102465780630700037d1461026f57806315b90cb21461029d578063299ca478146102a6575b600080fd5b6102596102543660046143fb565b6105a8565b60405161026691906144b4565b60405180910390f35b61028f61027d3660046144dc565b60066020526000908152604090205481565b604051908152602001610266565b61028f60115481565b6000546102b9906001600160a01b031681565b6040516001600160a01b039091168152602001610266565b6102e46102df3660046144f9565b6106c6565b005b61028f60105481565b6102e46102fd3660046144dc565b6108bc565b6103256103103660046144dc565b60076020526000908152604090205460ff1681565b60405160ff9091168152602001610266565b6102b961034536600461459e565b610af4565b61028f6103583660046145ef565b610b85565b61028f60125481565b6102e4610bca565b6102e461037c3660046144f9565b610d55565b6102e461038f3660046144f9565b610f46565b61028f6103a23660046144f9565b60096020526000908152604090205481565b6102e46103c2366004614664565b611296565b6102596040518060400160405280600d81526020017f4d455449535f4d414e414745520000000000000000000000000000000000000081525081565b6104166104113660046144dc565b611873565b6040519015158152602001610266565b6102e46104343660046144f9565b6118a2565b6102e46104473660046146be565b611b24565b61045f61045a3660046144f9565b611c1d565b6040516102669897969594939291906146f7565b6102e461048136600461478d565b611d52565b6103256104943660046144dc565b60086020526000908152604090205460ff1681565b6102596104b7366004614827565b611f87565b6104166104ca3660046144dc565b600a6020526000908152604090205460ff1681565b6102b96104ed3660046144f9565b61204e565b6102e461050036600461488b565b612078565b61028f600f5481565b6102e461051c366004614931565b612672565b6102e4612741565b6001546102b9906001600160a01b031681565b61041661054a3660046144dc565b6010546001600160a01b03909116600090815260026020526040902054101590565b6102e461057a3660046144f9565b612811565b61028f600e5481565b61028f6105963660046144dc565b60026020526000908152604090205481565b6060600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945083925050505b82518110156106ba578482036105fc57600091505b61065983828151811061061157610611614953565b01602001517fff000000000000000000000000000000000000000000000000000000000000001687878581811061064a5761064a614953565b919091013560f81c90506128da565b83828151811061066b5761066b614953565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350816106a48161497f565b92505080806106b29061497f565b9150506105e7565b50909695505050505050565b600f541561071b5760405162461bcd60e51b815260206004820181905260248201527f77697468647261772069732063757272656e746c792070726f6869626974656460448201526064015b60405180910390fd5b336000908152600260205260409020548181101561077b5760405162461bcd60e51b815260206004820152601e60248201527f696e73756666696369656e74207374616b6520746f20776974686472617700006044820152606401610712565b6010546107888383614999565b10801561079757506010548110155b156107ba57601280549060006107ac836149b0565b91905055506107ba33612916565b33600090815260026020526040812080548492906107d9908490614999565b90915550506001546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c91906149c7565b6108b85760405162461bcd60e51b815260206004820152601560248201527f746f6b656e207472616e73666572206661696c656400000000000000000000006044820152606401610712565b5050565b6108fa6040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146109805760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6000601154116109d25760405162461bcd60e51b815260206004820152600860248201527f6e6f207374616b650000000000000000000000000000000000000000000000006044820152606401610712565b6011546040805133815260208101929092527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a16011805460009091556001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906149c7565b6108b85760405162461bcd60e51b815260206004820152601560248201527f7472616e73666572206d65746973206661696c656400000000000000000000006044820152606401610712565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac190610b3e9085906004016144b4565b602060405180830381865afa158015610b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7f91906149e4565b92915050565b6000610bc3838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7192505050565b9392505050565b33600090815260066020526040902054610c265760405162461bcd60e51b815260206004820152601260248201527f6e6f2072657761726420746f20636c61696d00000000000000000000000000006044820152606401610712565b33600081815260066020526040808220805492905560015490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101939093526024830182905290916001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccc91906149c7565b610d185760405162461bcd60e51b815260206004820152601560248201527f746f6b656e207472616e73666572206661696c656400000000000000000000006044820152606401610712565b60408051338152602081018390527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d491015b60405180910390a150565b610d936040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b031614610e195760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6001546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead91906149c7565b610ef95760405162461bcd60e51b815260206004820152601560248201527f7472616e73666572206d65746973206661696c656400000000000000000000006044820152606401610712565b8060116000828254610f0b9190614a01565b909155505060408051338152602081018390527febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9101610d4a565b610f4f33611873565b610fc15760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b600f54156110115760405162461bcd60e51b815260206004820152601d60248201527f7374616b652069732063757272656e746c792070726f686962697465640000006044820152606401610712565b600081116110615760405162461bcd60e51b815260206004820152601660248201527f7a65726f207374616b65206e6f7420616c6c6f776564000000000000000000006044820152606401610712565b6001546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f591906149c7565b6111415760405162461bcd60e51b815260206004820152601560248201527f7472616e73666572206d65746973206661696c656400000000000000000000006044820152606401610712565b3360009081526002602052604081208054918391906111608385614a01565b90915550506010543360009081526002602052604090205410156111ec5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e74207374616b6520746f207175616c69667920617360448201527f20612076657269666965720000000000000000000000000000000000000000006064820152608401610712565b8060000361125957601280549060006112048361497f565b9091555050600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701805473ffffffffffffffffffffffffffffffffffffffff1916331790555b60408051338152602081018490527febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a910160405180910390a15050565b6010543360009081526002602052604090205410156112f75760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e74207374616b6500000000000000000000000000006044820152606401610712565b61130033611873565b6113725760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b601254600d848154811061138857611388614953565b90600052602060002090600d0201600a015414806113d65750600e54600d84815481106113b7576113b7614953565b90600052602060002090600d020160080154426113d49190614999565b115b6114225760405162461bcd60e51b815260206004820152601160248201527f70686173652032206e6f742072656164790000000000000000000000000000006044820152606401610712565b60008381526005602090815260408083203384529091528120805461144690614a19565b9050116114bb5760405162461bcd60e51b815260206004820152602160248201527f796f75206469646e277420706172746963697061746520696e2070686173652060448201527f31000000000000000000000000000000000000000000000000000000000000006064820152608401610712565b6000838152600360209081526040808320338452909152812080546114df90614a19565b905011156114f5576114f083612f54565b505050565b6000838152600460209081526040808320338452909152902061151790614a53565b60028383604051611529929190614a94565b602060405180830381855afa158015611546573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115699190614aa4565b146115b65760405162461bcd60e51b815260206004820152601b60248201527f6b657920616e64206b65796861736820646f6e2774206d6174636800000000006044820152606401610712565b600d83815481106115c9576115c9614953565b60009182526020909120600d90910201546001600160a01b0316330361169b5761166a600d84815481106115ff576115ff614953565b90600052602060002090600d02016003016001015460405160200161162691815260200190565b60408051601f198184030181526020601f860181900481028401810190925284835291908590859081908401838280828437600092019190915250611f8792505050565b61167390614abd565b600d848154811061168657611686614953565b600091825260209091206004600d9092020101555b600083815260036020908152604080832033845290915290206116bf828483614b2f565b506000838152600560209081526040808320338452909152902080546117a391906116e990614a19565b80601f016020809104026020016040519081016040528092919081815260200182805461171590614a19565b80156117625780601f1061173757610100808354040283529160200191611762565b820191906000526020600020905b81548152906001019060200180831161174557829003601f168201915b505050505083838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8792505050565b60008481526005602090815260408083203384529091529020906117c79082614bef565b50600d83815481106117db576117db614953565b60009182526020808320600b600d90930201919091018054600181018255908352912001805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556040517fcd699b485caf6a8424399921287eff9b6648355e67560923d33b3f9d8551726391611862918691909182526001600160a01b0316602082015260400190565b60405180910390a16114f083612f54565b600b5460009060ff161580610b7f5750506001600160a01b03166000908152600a602052604090205460ff1690565b6118e06040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146119665760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6010819055600c5460009015611b1e57600c5460009067ffffffffffffffff81111561199457611994614512565b6040519080825280602002602001820160405280156119bd578160200160208202803683370190505b50905060005b600c54811015611a8a5760105460026000600c84815481106119e7576119e7614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205410611a7a57600c8181548110611a2457611a24614953565b9060005260206000200160009054906101000a90046001600160a01b0316828481518110611a5457611a54614953565b6001600160a01b039092166020928302919091019091015282611a768161497f565b9350505b611a838161497f565b90506119c3565b50600c54821015611b1c57611aa1600c6000614280565b60005b82811015611b1a57600c828281518110611ac057611ac0614953565b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390921691909117905580611b128161497f565b915050611aa4565b505b505b60125550565b611b626040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b031614611be85760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6001600160a01b039091166000908152600a60205260409020805491151560ff19928316179055600b80549091166001179055565b600d8181548110611c2d57600080fd5b90600052602060002090600d02016000915090508060000160009054906101000a90046001600160a01b031690806001015490806002015490806003016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482018054611cad90614a19565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd990614a19565b8015611d265780601f10611cfb57610100808354040283529160200191611d26565b820191906000526020600020905b815481529060010190602001808311611d0957829003601f168201915b5050509190925250505060088201546009830154600a840154600c909401549293919290919060ff1688565b611d5b33611873565b611dcd5760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b601054336000908152600260205260409020541015611e2e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e74207374616b6500000000000000000000000000006044820152606401610712565b600085815260056020908152604080832033845290915290208054611e5290614a19565b159050611ec75760405162461bcd60e51b815260206004820152602860248201527f7665726966793120616c726561647920636f6d706c6574656420666f7220746860448201527f652073656e6465720000000000000000000000000000000000000000000000006064820152608401610712565b60008581526005602090815260408083203384529091529020611eeb848683614b2f565b5060008581526004602090815260408083203384529091529020611f10828483614b2f565b50600d8581548110611f2457611f24614953565b600091825260208220600a600d9092020101805491611f428361497f565b9091555050604080518681523360208201527f6f8abfaae8c5cb428b362c84259e542ab1f6424d0717b3495b02c4126e92943291015b60405180910390a15050505050565b6060826000805b82518110156120445784518203611fa457600091505b611fe3838281518110611fb957611fb9614953565b602001015160f81c60f81b868481518110611fd657611fd6614953565b016020015160f81c613e7d565b838281518110611ff557611ff5614953565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508161202e8161497f565b925050808061203c9061497f565b915050611f8e565b5090949350505050565b600c818154811061205e57600080fd5b6000918252602090912001546001600160a01b0316905081565b61208133611873565b6120f35760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b6010543360009081526002602052604090205410156121545760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e74207374616b6500000000000000000000000000006044820152606401610712565b60008681526009602052604081205461216f90600190614999565b90508015806121b95750600e54612187906002614caf565b600d828154811061219a5761219a614953565b90600052602060002090600d020160080154426121b79190614999565b115b6122055760405162461bcd60e51b815260206004820152601d60248201527f746865726520697320616e206f6e676f696e67206368616c6c656e67650000006044820152606401610712565b80156122145761221481612f54565b60006122546040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610af4565b6040517f9418bddd0000000000000000000000000000000000000000000000000000000081529091506001600160a01b03821690639418bddd9061229c908a90600401614d9c565b602060405180830381865afa1580156122b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122dd91906149c7565b61234f5760405162461bcd60e51b815260206004820152602e60248201527f746865206261746368206973206f757473696465206f6620746865206672617560448201527f642070726f6f662077696e646f770000000000000000000000000000000000006064820152608401610712565b6123576142a1565b6020810189905233815242608082015261237088614daf565b6060808301918252600d80546001810182556000829052845191027fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5810180546001600160a01b0390931673ffffffffffffffffffffffffffffffffffffffff199093169290921782556020808601517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb68301556040808701517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb7840155945180517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb88401908155918101517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb9840155948501517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eba830155928401517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1ebb820155608084015185949293917fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1ebc01906125079082614bef565b5050506080820151600882015560a0820151600982015560c0820151600a82015560e0820151805161254391600b84019160209091019061432b565b506101009190910151600c909101805460ff1916911515919091179055600d5460009061257290600190614999565b60008181526005602090815260408083203384529091529020909150612599888a83614b2f565b50600081815260046020908152604080832033845290915290206125be868883614b2f565b50600d81815481106125d2576125d2614953565b600091825260208220600a600d90920201018054916125f08361497f565b9091555050600f80549060006126058361497f565b909155506126169050816001614a01565b60008b8152600960205260409081902091909155517f441214906ecb1ed44d085cb85ab8071c4734e7b4975b38397b9a5df89dec72689061265e9083908d908d904290614e38565b60405180910390a150505050505050505050565b6126b06040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146127365760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b601491909155601355565b61277f6040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146128055760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b600b805460ff19169055565b61284f6040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146128d55760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b600e55565b600060f883901c6128ee60ff841682614e68565b905060ff8161ffff16111561290c5761290961010082614e8e565b90505b60f81b9392505050565b60008060005b600c5481101561297b57836001600160a01b0316600c828154811061294357612943614953565b6000918252602090912001546001600160a01b031603612969576001925080915061297b565b806129738161497f565b91505061291c565b5081156114f057805b600c5461299390600190614999565b811015612a2b57600c6129a7826001614a01565b815481106129b7576129b7614953565b600091825260209091200154600c80546001600160a01b0390921691839081106129e3576129e3614953565b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905580612a238161497f565b915050612984565b50600c805480612a3d57612a3d614eb1565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b600080825111612ae95760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e0000000000000000000000006064820152608401610712565b8151600103612b145781600081518110612b0557612b05614953565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b6001841115612f2a57612dc5600285614edd565b9150612dd2600285614ef1565b600114905060005b82811015612e7e578a612dee826002614caf565b81518110612dfe57612dfe614953565b602002602001015196508a816002612e169190614caf565b612e21906001614a01565b81518110612e3157612e31614953565b6020026020010151955086602089015285604089015287805190602001208b8281518110612e6157612e61614953565b602090810291909101015280612e768161497f565b915050612dda565b508015612efa5789612e91600186614999565b81518110612ea157612ea1614953565b60200260200101519550878360108110612ebd57612ebd614953565b602002015160001b945085602088015284604088015286805190602001208a8381518110612eed57612eed614953565b6020026020010181815250505b80612f06576000612f09565b60015b612f169060ff1683614a01565b935082612f228161497f565b935050612db1565b89600081518110612f3d57612f3d614953565b602002602001015198505050505050505050919050565b6000600d8281548110612f6957612f69614953565b60009182526020909120600d90910201600c81015490915060ff1615612fd15760405162461bcd60e51b815260206004820152601360248201527f6368616c6c656e676520697320636c6f736564000000000000000000000000006044820152606401610712565b600a810154600b820154148015906130035750600e54612ff2906002614caf565b60088201546130019042614999565b105b1561300c575050565b600061304c6040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610af4565b600084815260056020908152604080832086546001600160a01b0316845290915281209192509061307c90614a53565b905060008084600b018054905067ffffffffffffffff8111156130a1576130a1614512565b6040519080825280602002602001820160405280156130ca578160200160208202803683370190505b50905060008086600b018054905067ffffffffffffffff8111156130f0576130f0614512565b604051908082528060200260200182016040528015613119578160200160208202803683370190505b50905060008088600b018054905067ffffffffffffffff81111561313f5761313f614512565b604051908082528060200260200182016040528015613168578160200160208202803683370190505b5090506000805b600c54811015613666576131c6600c828154811061318f5761318f614953565b6000918252602090912001546001600160a01b03166010546001600160a01b03909116600090815260026020526040902054101590565b15806131ff57506131fd600c82815481106131e3576131e3614953565b6000918252602090912001546001600160a01b0316611873565b155b6136545760008c8152600560205260408120600c80548c9391908590811061322957613229614953565b60009182526020808320909101546001600160a01b03168352820192909252604001902061325690614a53565b0361337857600060076000600c848154811061327457613274614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16111561330b57600160076000600c84815481106132bb576132bb614953565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906132f290849060ff16614f05565b92506101000a81548160ff021916908360ff1602179055505b600c818154811061331e5761331e614953565b9060005260206000200160009054906101000a90046001600160a01b031687878151811061334e5761334e614953565b6001600160a01b0390921660209283029190910190910152856133708161497f565b965050613654565b60008c8152600360205260408120600c80549192918490811061339d5761339d614953565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546133cc90614a19565b905060000361353b57600260076000600c84815481106133ee576133ee614953565b60009182526020808320909101546001600160a01b031683528201929092526040018120805490919061342590849060ff16614f28565b92506101000a81548160ff021916908360ff16021790555060145460076000600c848154811061345757613457614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1611156135365760026000600c838154811061349c5761349c614953565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134cb9089614a01565b9750600c81815481106134e0576134e0614953565b9060005260206000200160009054906101000a90046001600160a01b031683838151811061351057613510614953565b6001600160a01b0390921660209283029190910190910152816135328161497f565b9250505b613654565b600060076000600c848154811061355457613554614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1611156135eb57600160076000600c848154811061359b5761359b614953565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906135d290849060ff16614f05565b92506101000a81548160ff021916908360ff1602179055505b600c81815481106135fe576135fe614953565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061362e5761362e614953565b6001600160a01b0390921660209283029190910190910152836136508161497f565b9450505b8061365e8161497f565b91505061316f565b5060005b818110156136a75761369483828151811061368757613687614953565b6020026020010151613eb2565b508061369f8161497f565b91505061366a565b50886001600160a01b031663cfdf677e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370a91906149e4565b60018b015460038c01546040517f67d18b9b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526001600160a01b0391909116906367d18b9b90604401602060405180830381865afa15801561377a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379e9190614aa4565b61386f8b6003016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820180546137e890614a19565b80601f016020809104026020016040519081016040528092919081815260200182805461381490614a19565b80156138615780601f1061383657610100808354040283529160200191613861565b820191906000526020600020905b81548152906001019060200180831161384457829003601f168201915b505050505081525050613f35565b146138f3578954613888906001600160a01b0316613eb2565b6138929088614a01565b96506138b2878560018d600b01805490506138ad9190614999565b613f7b565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360036040516138e693929190614f4d565b60405180910390a1613e38565b6064601254604b6139049190614caf565b61390e9190614edd565b600b8b0154101561394d577fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360006040516138e693929190614f4d565b60048a01548814613cf957828511613a645760005b85811015613a575760026008600089848151811061398257613982614953565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282829054906101000a900460ff166139c59190614f28565b92506101000a81548160ff021916908360ff160217905550601354600860008984815181106139f6576139f6614953565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161115613a4557613a3887828151811061368757613687614953565b613a429089614a01565b97505b80613a4f8161497f565b915050613962565b506138b287858651613f7b565b6040517f9418bddd0000000000000000000000000000000000000000000000000000000081526001600160a01b038a1690639418bddd90613aac9060038e0190600401615047565b602060405180830381865afa158015613ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aed91906149c7565b15613cc55760018a01546040517f2ab65ec70000000000000000000000000000000000000000000000000000000081526001600160a01b038b1691632ab65ec791613b40919060038f019060040161505a565b600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b5050505060006011541115613c9157601154613b8a9088614a01565b965060005b83811015613c8457600260086000878481518110613baf57613baf614953565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282829054906101000a900460ff16613bf29190614f28565b92506101000a81548160ff021916908360ff16021790555060135460086000878481518110613c2357613c23614953565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161115613c7257613c6585828151811061368757613687614953565b613c6f9089614a01565b97505b80613c7c8161497f565b915050613b8f565b50613c9187878851613f7b565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360026040516138e693929190614f4d565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360046040516138e693929190614f4d565b89546001600160a01b03166000908152600860205260408120805460029290613d2690849060ff16614f28565b82546101009290920a60ff8181021990931691831602179091556013548c546001600160a01b031660009081526008602052604090205490911611159050613d89578954613d7c906001600160a01b0316613eb2565b613d869088614a01565b96505b613dfb878b600b01805480602002602001604051908101604052809291908181526020018280548015613de557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613dc7575b505050600b8f01546138ad925060019150614999565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b336001604051613e2f93929190614f4d565b60405180910390a15b600c8a01805460ff19166001179055600f8054906000613e57836149b0565b909155505050600190980154600090815260096020526040812055505050505050505050565b600060f883901c60ff8316811115613ea357613e9c60ff841682614e8e565b905061290c565b61290960ff8416610100614e8e565b6001600160a01b0381166000908152600260205260408120805490829055601280549083613edf836149b0565b9190505550613eed83612916565b604080516001600160a01b0385168152602081018390527f39505629e9ffd84b4cea98325402ef1c5a184b431c9a7314a352e064f6658bed910160405180910390a192915050565b60008160200151826040015183606001518460800151604051602001613f5e9493929190615073565b604051602081830303815290604052805190602001209050919050565b6000613f878285614edd565b905080600003613f975750505050565b6000805b84518110156140c157613fe3858281518110613fb957613fb9614953565b60200260200101516010546001600160a01b03909116600090815260026020526040902054101590565b156140af578260066000878481518110613fff57613fff614953565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546140369190614a01565b9091555061404690508383614a01565b91507f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc985828151811061407b5761407b614953565b6020026020010151846040516140a69291906001600160a01b03929092168252602082015260400190565b60405180910390a15b806140b98161497f565b915050613f9b565b5084811015614279576140e084600081518110613fb957613fb9614953565b156141b3576140ef8582614999565b600660008660008151811061410657614106614953565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461413d9190614a01565b925050819055507f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc98460008151811061417857614178614953565b6020026020010151868361418c9190614999565b604080516001600160a01b03909316835260208301919091520160405180910390a1614279565b6141bd8582614999565b60066000866001815181106141d4576141d4614953565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461420b9190614a01565b925050819055507f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc98460018151811061424657614246614953565b6020026020010151868361425a9190614999565b604080516001600160a01b039093168352602083019190915201611f78565b5050505050565b508054600082559060005260206000209081019061429e919061439d565b50565b60405180610120016040528060006001600160a01b0316815260200160008152602001600081526020016143006040518060a0016040528060008152602001600080191681526020016000815260200160008152602001606081525090565b8152602001600081526020016000815260200160008152602001606081526020016000151581525090565b82805482825590600052602060002090810192821561438d579160200282015b8281111561438d578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617825560209092019160019091019061434b565b5061439992915061439d565b5090565b5b80821115614399576000815560010161439e565b60008083601f8401126143c457600080fd5b50813567ffffffffffffffff8111156143dc57600080fd5b6020830191508360208285010111156143f457600080fd5b9250929050565b6000806000806040858703121561441157600080fd5b843567ffffffffffffffff8082111561442957600080fd5b614435888389016143b2565b9096509450602087013591508082111561444e57600080fd5b5061445b878288016143b2565b95989497509550505050565b6000815180845260005b8181101561448d57602081850181015186830182015201614471565b8181111561449f576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610bc36020830184614467565b6001600160a01b038116811461429e57600080fd5b6000602082840312156144ee57600080fd5b8135610bc3816144c7565b60006020828403121561450b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561454357614543614512565b604051601f8501601f19908116603f0116810190828211818310171561456b5761456b614512565b8160405280935085815286868601111561458457600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156145b057600080fd5b813567ffffffffffffffff8111156145c757600080fd5b8201601f810184136145d857600080fd5b6145e784823560208401614528565b949350505050565b6000806020838503121561460257600080fd5b823567ffffffffffffffff8082111561461a57600080fd5b818501915085601f83011261462e57600080fd5b81358181111561463d57600080fd5b8660208260051b850101111561465257600080fd5b60209290920196919550909350505050565b60008060006040848603121561467957600080fd5b83359250602084013567ffffffffffffffff81111561469757600080fd5b6146a3868287016143b2565b9497909650939450505050565b801515811461429e57600080fd5b600080604083850312156146d157600080fd5b82356146dc816144c7565b915060208301356146ec816146b0565b809150509250929050565b60006101006001600160a01b038b16835289602084015288604084015280606084015287518184015250602087015161012083015260408701516101408301526060870151610160830152608087015160a061018084015261475d6101a0840182614467565b9150508560808301528460a08301528360c083015261478060e083018415159052565b9998505050505050505050565b6000806000806000606086880312156147a557600080fd5b85359450602086013567ffffffffffffffff808211156147c457600080fd5b6147d089838a016143b2565b909650945060408801359150808211156147e957600080fd5b506147f6888289016143b2565b969995985093965092949392505050565b600082601f83011261481857600080fd5b610bc383833560208501614528565b6000806040838503121561483a57600080fd5b823567ffffffffffffffff8082111561485257600080fd5b61485e86838701614807565b9350602085013591508082111561487457600080fd5b5061488185828601614807565b9150509250929050565b600080600080600080608087890312156148a457600080fd5b86359550602087013567ffffffffffffffff808211156148c357600080fd5b9088019060a0828b0312156148d757600080fd5b909550604088013590808211156148ed57600080fd5b6148f98a838b016143b2565b9096509450606089013591508082111561491257600080fd5b5061491f89828a016143b2565b979a9699509497509295939492505050565b6000806040838503121561494457600080fd5b50508035926020909101359150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361499257614992614969565b5060010190565b6000828210156149ab576149ab614969565b500390565b6000816149bf576149bf614969565b506000190190565b6000602082840312156149d957600080fd5b8151610bc3816146b0565b6000602082840312156149f657600080fd5b8151610bc3816144c7565b60008219821115614a1457614a14614969565b500190565b600181811c90821680614a2d57607f821691505b602082108103614a4d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000614a5f8254614a19565b82601f821115614a755783600052602060002090505b5491506020811015614a4d5760001960209190910360031b1b16919050565b8183823760009101908152919050565b600060208284031215614ab657600080fd5b5051919050565b80516020808301519190811015614a4d5760001960209190910360031b1b16919050565b601f8211156114f057600081815260208120601f850160051c81016020861015614b085750805b601f850160051c820191505b81811015614b2757828155600101614b14565b505050505050565b67ffffffffffffffff831115614b4757614b47614512565b614b5b83614b558354614a19565b83614ae1565b6000601f841160018114614b8f5760008515614b775750838201355b600019600387901b1c1916600186901b178355614279565b600083815260209020601f19861690835b82811015614bc05786850135825560209485019460019092019101614ba0565b5086821015614bdd5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815167ffffffffffffffff811115614c0957614c09614512565b614c1d81614c178454614a19565b84614ae1565b602080601f831160018114614c525760008415614c3a5750858301515b600019600386901b1c1916600185901b178555614b27565b600085815260208120601f198616915b82811015614c8157888601518255948401946001909101908401614c62565b5085821015614c9f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000816000190483118215151615614cc957614cc9614969565b500290565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b80358252602081013560208301526040810135604083015260608101356060830152600060808201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112614d5257600080fd5b820160208101903567ffffffffffffffff811115614d6f57600080fd5b803603821315614d7e57600080fd5b60a06080860152614d9360a086018284614cce565b95945050505050565b602081526000610bc36020830184614cf9565b600060a08236031215614dc157600080fd5b60405160a0810167ffffffffffffffff8282108183111715614de557614de5614512565b81604052843583526020850135602084015260408501356040840152606085013560608401526080850135915080821115614e1f57600080fd5b50614e2c36828601614807565b60808301525092915050565b848152836020820152608060408201526000614e576080830185614cf9565b905082606083015295945050505050565b600061ffff808316818516808303821115614e8557614e85614969565b01949350505050565b600061ffff83811690831681811015614ea957614ea9614969565b039392505050565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082614eec57614eec614ec7565b500490565b600082614f0057614f00614ec7565b500690565b600060ff821660ff841680821015614f1f57614f1f614969565b90039392505050565b600060ff821660ff84168060ff03821115614f4557614f45614969565b019392505050565b8381526001600160a01b03831660208201526060810160058310614f8157634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b80548252600060018083015460208181870152600285015460408701526003850154606087015260048501915060a0608087015260008254614fd081614a19565b8060a08a015260c086831660008114614ff0576001811461500a57615038565b60ff198416828c01528183151560051b8c01019450615038565b866000528560002060005b848110156150305781548d8201850152908901908701615015565b8c0183019550505b50929998505050505050505050565b602081526000610bc36020830184614f8f565b8281526040602082015260006145e76040830184614f8f565b8481528360208201528260408201526080606082015260006150986080830184614467565b969550505050505056fea2646970667358221220ccb43705a238e81db2fa2d88c2fc81e76f89b3f50ba06dd69f6cf627fd5f9ad064736f6c634300080f0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102415760003560e01c80636f9170f611610145578063b4b6de38116100bd578063e59745541161008c578063ef53b04111610071578063ef53b0411461056c578063fca0fd6c1461057f578063ffa444ec1461058857600080fd5b8063e597455414610529578063eab0fca31461053c57600080fd5b8063b4b6de38146104f2578063b646c02514610505578063b9c362091461050e578063dcd836161461052157600080fd5b8063939f59fe1161011457806398fe9dfb116100f957806398fe9dfb146104a95780639b19251a146104bc578063ac1eff68146104df57600080fd5b8063939f59fe14610473578063966df42b1461048657600080fd5b80636f9170f6146104035780638c80fd90146104265780638d14e127146104395780638f1d37761461044c57600080fd5b8063461a4478116101d857806353dec0e8116101a75780635cc38c021161018c5780635cc38c02146103945780636593363f146103b4578063669fdeb5146103c757600080fd5b806353dec0e81461036e5780635bf0f25d1461038157600080fd5b8063461a4478146103375780634869bfb61461034a5780634d4127af1461035d5780634e71d92d1461036657600080fd5b80632e1a7d4d116102145780632e1a7d4d146102d1578063375b3c0a146102e6578063383e5e69146102ef57806340a89eae1461030257600080fd5b8063015cfec7146102465780630700037d1461026f57806315b90cb21461029d578063299ca478146102a6575b600080fd5b6102596102543660046143fb565b6105a8565b60405161026691906144b4565b60405180910390f35b61028f61027d3660046144dc565b60066020526000908152604090205481565b604051908152602001610266565b61028f60115481565b6000546102b9906001600160a01b031681565b6040516001600160a01b039091168152602001610266565b6102e46102df3660046144f9565b6106c6565b005b61028f60105481565b6102e46102fd3660046144dc565b6108bc565b6103256103103660046144dc565b60076020526000908152604090205460ff1681565b60405160ff9091168152602001610266565b6102b961034536600461459e565b610af4565b61028f6103583660046145ef565b610b85565b61028f60125481565b6102e4610bca565b6102e461037c3660046144f9565b610d55565b6102e461038f3660046144f9565b610f46565b61028f6103a23660046144f9565b60096020526000908152604090205481565b6102e46103c2366004614664565b611296565b6102596040518060400160405280600d81526020017f4d455449535f4d414e414745520000000000000000000000000000000000000081525081565b6104166104113660046144dc565b611873565b6040519015158152602001610266565b6102e46104343660046144f9565b6118a2565b6102e46104473660046146be565b611b24565b61045f61045a3660046144f9565b611c1d565b6040516102669897969594939291906146f7565b6102e461048136600461478d565b611d52565b6103256104943660046144dc565b60086020526000908152604090205460ff1681565b6102596104b7366004614827565b611f87565b6104166104ca3660046144dc565b600a6020526000908152604090205460ff1681565b6102b96104ed3660046144f9565b61204e565b6102e461050036600461488b565b612078565b61028f600f5481565b6102e461051c366004614931565b612672565b6102e4612741565b6001546102b9906001600160a01b031681565b61041661054a3660046144dc565b6010546001600160a01b03909116600090815260026020526040902054101590565b6102e461057a3660046144f9565b612811565b61028f600e5481565b61028f6105963660046144dc565b60026020526000908152604090205481565b6060600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945083925050505b82518110156106ba578482036105fc57600091505b61065983828151811061061157610611614953565b01602001517fff000000000000000000000000000000000000000000000000000000000000001687878581811061064a5761064a614953565b919091013560f81c90506128da565b83828151811061066b5761066b614953565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350816106a48161497f565b92505080806106b29061497f565b9150506105e7565b50909695505050505050565b600f541561071b5760405162461bcd60e51b815260206004820181905260248201527f77697468647261772069732063757272656e746c792070726f6869626974656460448201526064015b60405180910390fd5b336000908152600260205260409020548181101561077b5760405162461bcd60e51b815260206004820152601e60248201527f696e73756666696369656e74207374616b6520746f20776974686472617700006044820152606401610712565b6010546107888383614999565b10801561079757506010548110155b156107ba57601280549060006107ac836149b0565b91905055506107ba33612916565b33600090815260026020526040812080548492906107d9908490614999565b90915550506001546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c91906149c7565b6108b85760405162461bcd60e51b815260206004820152601560248201527f746f6b656e207472616e73666572206661696c656400000000000000000000006044820152606401610712565b5050565b6108fa6040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146109805760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6000601154116109d25760405162461bcd60e51b815260206004820152600860248201527f6e6f207374616b650000000000000000000000000000000000000000000000006044820152606401610712565b6011546040805133815260208101929092527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a16011805460009091556001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906149c7565b6108b85760405162461bcd60e51b815260206004820152601560248201527f7472616e73666572206d65746973206661696c656400000000000000000000006044820152606401610712565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac190610b3e9085906004016144b4565b602060405180830381865afa158015610b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7f91906149e4565b92915050565b6000610bc3838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7192505050565b9392505050565b33600090815260066020526040902054610c265760405162461bcd60e51b815260206004820152601260248201527f6e6f2072657761726420746f20636c61696d00000000000000000000000000006044820152606401610712565b33600081815260066020526040808220805492905560015490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101939093526024830182905290916001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccc91906149c7565b610d185760405162461bcd60e51b815260206004820152601560248201527f746f6b656e207472616e73666572206661696c656400000000000000000000006044820152606401610712565b60408051338152602081018390527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d491015b60405180910390a150565b610d936040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b031614610e195760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6001546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead91906149c7565b610ef95760405162461bcd60e51b815260206004820152601560248201527f7472616e73666572206d65746973206661696c656400000000000000000000006044820152606401610712565b8060116000828254610f0b9190614a01565b909155505060408051338152602081018390527febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9101610d4a565b610f4f33611873565b610fc15760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b600f54156110115760405162461bcd60e51b815260206004820152601d60248201527f7374616b652069732063757272656e746c792070726f686962697465640000006044820152606401610712565b600081116110615760405162461bcd60e51b815260206004820152601660248201527f7a65726f207374616b65206e6f7420616c6c6f776564000000000000000000006044820152606401610712565b6001546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f591906149c7565b6111415760405162461bcd60e51b815260206004820152601560248201527f7472616e73666572206d65746973206661696c656400000000000000000000006044820152606401610712565b3360009081526002602052604081208054918391906111608385614a01565b90915550506010543360009081526002602052604090205410156111ec5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e74207374616b6520746f207175616c69667920617360448201527f20612076657269666965720000000000000000000000000000000000000000006064820152608401610712565b8060000361125957601280549060006112048361497f565b9091555050600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701805473ffffffffffffffffffffffffffffffffffffffff1916331790555b60408051338152602081018490527febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a910160405180910390a15050565b6010543360009081526002602052604090205410156112f75760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e74207374616b6500000000000000000000000000006044820152606401610712565b61130033611873565b6113725760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b601254600d848154811061138857611388614953565b90600052602060002090600d0201600a015414806113d65750600e54600d84815481106113b7576113b7614953565b90600052602060002090600d020160080154426113d49190614999565b115b6114225760405162461bcd60e51b815260206004820152601160248201527f70686173652032206e6f742072656164790000000000000000000000000000006044820152606401610712565b60008381526005602090815260408083203384529091528120805461144690614a19565b9050116114bb5760405162461bcd60e51b815260206004820152602160248201527f796f75206469646e277420706172746963697061746520696e2070686173652060448201527f31000000000000000000000000000000000000000000000000000000000000006064820152608401610712565b6000838152600360209081526040808320338452909152812080546114df90614a19565b905011156114f5576114f083612f54565b505050565b6000838152600460209081526040808320338452909152902061151790614a53565b60028383604051611529929190614a94565b602060405180830381855afa158015611546573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115699190614aa4565b146115b65760405162461bcd60e51b815260206004820152601b60248201527f6b657920616e64206b65796861736820646f6e2774206d6174636800000000006044820152606401610712565b600d83815481106115c9576115c9614953565b60009182526020909120600d90910201546001600160a01b0316330361169b5761166a600d84815481106115ff576115ff614953565b90600052602060002090600d02016003016001015460405160200161162691815260200190565b60408051601f198184030181526020601f860181900481028401810190925284835291908590859081908401838280828437600092019190915250611f8792505050565b61167390614abd565b600d848154811061168657611686614953565b600091825260209091206004600d9092020101555b600083815260036020908152604080832033845290915290206116bf828483614b2f565b506000838152600560209081526040808320338452909152902080546117a391906116e990614a19565b80601f016020809104026020016040519081016040528092919081815260200182805461171590614a19565b80156117625780601f1061173757610100808354040283529160200191611762565b820191906000526020600020905b81548152906001019060200180831161174557829003601f168201915b505050505083838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8792505050565b60008481526005602090815260408083203384529091529020906117c79082614bef565b50600d83815481106117db576117db614953565b60009182526020808320600b600d90930201919091018054600181018255908352912001805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556040517fcd699b485caf6a8424399921287eff9b6648355e67560923d33b3f9d8551726391611862918691909182526001600160a01b0316602082015260400190565b60405180910390a16114f083612f54565b600b5460009060ff161580610b7f5750506001600160a01b03166000908152600a602052604090205460ff1690565b6118e06040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146119665760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6010819055600c5460009015611b1e57600c5460009067ffffffffffffffff81111561199457611994614512565b6040519080825280602002602001820160405280156119bd578160200160208202803683370190505b50905060005b600c54811015611a8a5760105460026000600c84815481106119e7576119e7614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205410611a7a57600c8181548110611a2457611a24614953565b9060005260206000200160009054906101000a90046001600160a01b0316828481518110611a5457611a54614953565b6001600160a01b039092166020928302919091019091015282611a768161497f565b9350505b611a838161497f565b90506119c3565b50600c54821015611b1c57611aa1600c6000614280565b60005b82811015611b1a57600c828281518110611ac057611ac0614953565b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390921691909117905580611b128161497f565b915050611aa4565b505b505b60125550565b611b626040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b031614611be85760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b6001600160a01b039091166000908152600a60205260409020805491151560ff19928316179055600b80549091166001179055565b600d8181548110611c2d57600080fd5b90600052602060002090600d02016000915090508060000160009054906101000a90046001600160a01b031690806001015490806002015490806003016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482018054611cad90614a19565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd990614a19565b8015611d265780601f10611cfb57610100808354040283529160200191611d26565b820191906000526020600020905b815481529060010190602001808311611d0957829003601f168201915b5050509190925250505060088201546009830154600a840154600c909401549293919290919060ff1688565b611d5b33611873565b611dcd5760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b601054336000908152600260205260409020541015611e2e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e74207374616b6500000000000000000000000000006044820152606401610712565b600085815260056020908152604080832033845290915290208054611e5290614a19565b159050611ec75760405162461bcd60e51b815260206004820152602860248201527f7665726966793120616c726561647920636f6d706c6574656420666f7220746860448201527f652073656e6465720000000000000000000000000000000000000000000000006064820152608401610712565b60008581526005602090815260408083203384529091529020611eeb848683614b2f565b5060008581526004602090815260408083203384529091529020611f10828483614b2f565b50600d8581548110611f2457611f24614953565b600091825260208220600a600d9092020101805491611f428361497f565b9091555050604080518681523360208201527f6f8abfaae8c5cb428b362c84259e542ab1f6424d0717b3495b02c4126e92943291015b60405180910390a15050505050565b6060826000805b82518110156120445784518203611fa457600091505b611fe3838281518110611fb957611fb9614953565b602001015160f81c60f81b868481518110611fd657611fd6614953565b016020015160f81c613e7d565b838281518110611ff557611ff5614953565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508161202e8161497f565b925050808061203c9061497f565b915050611f8e565b5090949350505050565b600c818154811061205e57600080fd5b6000918252602090912001546001600160a01b0316905081565b61208133611873565b6120f35760405162461bcd60e51b815260206004820152602360248201527f6f6e6c792077686974656c6973746564207665726966696572732063616e206360448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610712565b6010543360009081526002602052604090205410156121545760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e74207374616b6500000000000000000000000000006044820152606401610712565b60008681526009602052604081205461216f90600190614999565b90508015806121b95750600e54612187906002614caf565b600d828154811061219a5761219a614953565b90600052602060002090600d020160080154426121b79190614999565b115b6122055760405162461bcd60e51b815260206004820152601d60248201527f746865726520697320616e206f6e676f696e67206368616c6c656e67650000006044820152606401610712565b80156122145761221481612f54565b60006122546040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610af4565b6040517f9418bddd0000000000000000000000000000000000000000000000000000000081529091506001600160a01b03821690639418bddd9061229c908a90600401614d9c565b602060405180830381865afa1580156122b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122dd91906149c7565b61234f5760405162461bcd60e51b815260206004820152602e60248201527f746865206261746368206973206f757473696465206f6620746865206672617560448201527f642070726f6f662077696e646f770000000000000000000000000000000000006064820152608401610712565b6123576142a1565b6020810189905233815242608082015261237088614daf565b6060808301918252600d80546001810182556000829052845191027fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5810180546001600160a01b0390931673ffffffffffffffffffffffffffffffffffffffff199093169290921782556020808601517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb68301556040808701517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb7840155945180517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb88401908155918101517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb9840155948501517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eba830155928401517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1ebb820155608084015185949293917fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1ebc01906125079082614bef565b5050506080820151600882015560a0820151600982015560c0820151600a82015560e0820151805161254391600b84019160209091019061432b565b506101009190910151600c909101805460ff1916911515919091179055600d5460009061257290600190614999565b60008181526005602090815260408083203384529091529020909150612599888a83614b2f565b50600081815260046020908152604080832033845290915290206125be868883614b2f565b50600d81815481106125d2576125d2614953565b600091825260208220600a600d90920201018054916125f08361497f565b9091555050600f80549060006126058361497f565b909155506126169050816001614a01565b60008b8152600960205260409081902091909155517f441214906ecb1ed44d085cb85ab8071c4734e7b4975b38397b9a5df89dec72689061265e9083908d908d904290614e38565b60405180910390a150505050505050505050565b6126b06040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146127365760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b601491909155601355565b61277f6040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146128055760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b600b805460ff19169055565b61284f6040518060400160405280600d81526020017f4d455449535f4d414e4147455200000000000000000000000000000000000000815250610af4565b6001600160a01b0316336001600160a01b0316146128d55760405162461bcd60e51b815260206004820152603f60248201527f4d564d5f56657269666965723a2046756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c656420627920746865204d455449535f4d414e414745522e006064820152608401610712565b600e55565b600060f883901c6128ee60ff841682614e68565b905060ff8161ffff16111561290c5761290961010082614e8e565b90505b60f81b9392505050565b60008060005b600c5481101561297b57836001600160a01b0316600c828154811061294357612943614953565b6000918252602090912001546001600160a01b031603612969576001925080915061297b565b806129738161497f565b91505061291c565b5081156114f057805b600c5461299390600190614999565b811015612a2b57600c6129a7826001614a01565b815481106129b7576129b7614953565b600091825260209091200154600c80546001600160a01b0390921691839081106129e3576129e3614953565b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905580612a238161497f565b915050612984565b50600c805480612a3d57612a3d614eb1565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b600080825111612ae95760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e0000000000000000000000006064820152608401610712565b8151600103612b145781600081518110612b0557612b05614953565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b6001841115612f2a57612dc5600285614edd565b9150612dd2600285614ef1565b600114905060005b82811015612e7e578a612dee826002614caf565b81518110612dfe57612dfe614953565b602002602001015196508a816002612e169190614caf565b612e21906001614a01565b81518110612e3157612e31614953565b6020026020010151955086602089015285604089015287805190602001208b8281518110612e6157612e61614953565b602090810291909101015280612e768161497f565b915050612dda565b508015612efa5789612e91600186614999565b81518110612ea157612ea1614953565b60200260200101519550878360108110612ebd57612ebd614953565b602002015160001b945085602088015284604088015286805190602001208a8381518110612eed57612eed614953565b6020026020010181815250505b80612f06576000612f09565b60015b612f169060ff1683614a01565b935082612f228161497f565b935050612db1565b89600081518110612f3d57612f3d614953565b602002602001015198505050505050505050919050565b6000600d8281548110612f6957612f69614953565b60009182526020909120600d90910201600c81015490915060ff1615612fd15760405162461bcd60e51b815260206004820152601360248201527f6368616c6c656e676520697320636c6f736564000000000000000000000000006044820152606401610712565b600a810154600b820154148015906130035750600e54612ff2906002614caf565b60088201546130019042614999565b105b1561300c575050565b600061304c6040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610af4565b600084815260056020908152604080832086546001600160a01b0316845290915281209192509061307c90614a53565b905060008084600b018054905067ffffffffffffffff8111156130a1576130a1614512565b6040519080825280602002602001820160405280156130ca578160200160208202803683370190505b50905060008086600b018054905067ffffffffffffffff8111156130f0576130f0614512565b604051908082528060200260200182016040528015613119578160200160208202803683370190505b50905060008088600b018054905067ffffffffffffffff81111561313f5761313f614512565b604051908082528060200260200182016040528015613168578160200160208202803683370190505b5090506000805b600c54811015613666576131c6600c828154811061318f5761318f614953565b6000918252602090912001546001600160a01b03166010546001600160a01b03909116600090815260026020526040902054101590565b15806131ff57506131fd600c82815481106131e3576131e3614953565b6000918252602090912001546001600160a01b0316611873565b155b6136545760008c8152600560205260408120600c80548c9391908590811061322957613229614953565b60009182526020808320909101546001600160a01b03168352820192909252604001902061325690614a53565b0361337857600060076000600c848154811061327457613274614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16111561330b57600160076000600c84815481106132bb576132bb614953565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906132f290849060ff16614f05565b92506101000a81548160ff021916908360ff1602179055505b600c818154811061331e5761331e614953565b9060005260206000200160009054906101000a90046001600160a01b031687878151811061334e5761334e614953565b6001600160a01b0390921660209283029190910190910152856133708161497f565b965050613654565b60008c8152600360205260408120600c80549192918490811061339d5761339d614953565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546133cc90614a19565b905060000361353b57600260076000600c84815481106133ee576133ee614953565b60009182526020808320909101546001600160a01b031683528201929092526040018120805490919061342590849060ff16614f28565b92506101000a81548160ff021916908360ff16021790555060145460076000600c848154811061345757613457614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1611156135365760026000600c838154811061349c5761349c614953565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134cb9089614a01565b9750600c81815481106134e0576134e0614953565b9060005260206000200160009054906101000a90046001600160a01b031683838151811061351057613510614953565b6001600160a01b0390921660209283029190910190910152816135328161497f565b9250505b613654565b600060076000600c848154811061355457613554614953565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1611156135eb57600160076000600c848154811061359b5761359b614953565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906135d290849060ff16614f05565b92506101000a81548160ff021916908360ff1602179055505b600c81815481106135fe576135fe614953565b9060005260206000200160009054906101000a90046001600160a01b031685858151811061362e5761362e614953565b6001600160a01b0390921660209283029190910190910152836136508161497f565b9450505b8061365e8161497f565b91505061316f565b5060005b818110156136a75761369483828151811061368757613687614953565b6020026020010151613eb2565b508061369f8161497f565b91505061366a565b50886001600160a01b031663cfdf677e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370a91906149e4565b60018b015460038c01546040517f67d18b9b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526001600160a01b0391909116906367d18b9b90604401602060405180830381865afa15801561377a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379e9190614aa4565b61386f8b6003016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820180546137e890614a19565b80601f016020809104026020016040519081016040528092919081815260200182805461381490614a19565b80156138615780601f1061383657610100808354040283529160200191613861565b820191906000526020600020905b81548152906001019060200180831161384457829003601f168201915b505050505081525050613f35565b146138f3578954613888906001600160a01b0316613eb2565b6138929088614a01565b96506138b2878560018d600b01805490506138ad9190614999565b613f7b565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360036040516138e693929190614f4d565b60405180910390a1613e38565b6064601254604b6139049190614caf565b61390e9190614edd565b600b8b0154101561394d577fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360006040516138e693929190614f4d565b60048a01548814613cf957828511613a645760005b85811015613a575760026008600089848151811061398257613982614953565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282829054906101000a900460ff166139c59190614f28565b92506101000a81548160ff021916908360ff160217905550601354600860008984815181106139f6576139f6614953565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161115613a4557613a3887828151811061368757613687614953565b613a429089614a01565b97505b80613a4f8161497f565b915050613962565b506138b287858651613f7b565b6040517f9418bddd0000000000000000000000000000000000000000000000000000000081526001600160a01b038a1690639418bddd90613aac9060038e0190600401615047565b602060405180830381865afa158015613ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aed91906149c7565b15613cc55760018a01546040517f2ab65ec70000000000000000000000000000000000000000000000000000000081526001600160a01b038b1691632ab65ec791613b40919060038f019060040161505a565b600060405180830381600087803b158015613b5a57600080fd5b505af1158015613b6e573d6000803e3d6000fd5b5050505060006011541115613c9157601154613b8a9088614a01565b965060005b83811015613c8457600260086000878481518110613baf57613baf614953565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282829054906101000a900460ff16613bf29190614f28565b92506101000a81548160ff021916908360ff16021790555060135460086000878481518110613c2357613c23614953565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161115613c7257613c6585828151811061368757613687614953565b613c6f9089614a01565b97505b80613c7c8161497f565b915050613b8f565b50613c9187878851613f7b565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360026040516138e693929190614f4d565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b3360046040516138e693929190614f4d565b89546001600160a01b03166000908152600860205260408120805460029290613d2690849060ff16614f28565b82546101009290920a60ff8181021990931691831602179091556013548c546001600160a01b031660009081526008602052604090205490911611159050613d89578954613d7c906001600160a01b0316613eb2565b613d869088614a01565b96505b613dfb878b600b01805480602002602001604051908101604052809291908181526020018280548015613de557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613dc7575b505050600b8f01546138ad925060019150614999565b7fd1f2f16cb8824bf0d832b207b27728846938ede14202c2335406d9c3509995f78b336001604051613e2f93929190614f4d565b60405180910390a15b600c8a01805460ff19166001179055600f8054906000613e57836149b0565b909155505050600190980154600090815260096020526040812055505050505050505050565b600060f883901c60ff8316811115613ea357613e9c60ff841682614e8e565b905061290c565b61290960ff8416610100614e8e565b6001600160a01b0381166000908152600260205260408120805490829055601280549083613edf836149b0565b9190505550613eed83612916565b604080516001600160a01b0385168152602081018390527f39505629e9ffd84b4cea98325402ef1c5a184b431c9a7314a352e064f6658bed910160405180910390a192915050565b60008160200151826040015183606001518460800151604051602001613f5e9493929190615073565b604051602081830303815290604052805190602001209050919050565b6000613f878285614edd565b905080600003613f975750505050565b6000805b84518110156140c157613fe3858281518110613fb957613fb9614953565b60200260200101516010546001600160a01b03909116600090815260026020526040902054101590565b156140af578260066000878481518110613fff57613fff614953565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546140369190614a01565b9091555061404690508383614a01565b91507f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc985828151811061407b5761407b614953565b6020026020010151846040516140a69291906001600160a01b03929092168252602082015260400190565b60405180910390a15b806140b98161497f565b915050613f9b565b5084811015614279576140e084600081518110613fb957613fb9614953565b156141b3576140ef8582614999565b600660008660008151811061410657614106614953565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461413d9190614a01565b925050819055507f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc98460008151811061417857614178614953565b6020026020010151868361418c9190614999565b604080516001600160a01b03909316835260208301919091520160405180910390a1614279565b6141bd8582614999565b60066000866001815181106141d4576141d4614953565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461420b9190614a01565b925050819055507f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc98460018151811061424657614246614953565b6020026020010151868361425a9190614999565b604080516001600160a01b039093168352602083019190915201611f78565b5050505050565b508054600082559060005260206000209081019061429e919061439d565b50565b60405180610120016040528060006001600160a01b0316815260200160008152602001600081526020016143006040518060a0016040528060008152602001600080191681526020016000815260200160008152602001606081525090565b8152602001600081526020016000815260200160008152602001606081526020016000151581525090565b82805482825590600052602060002090810192821561438d579160200282015b8281111561438d578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617825560209092019160019091019061434b565b5061439992915061439d565b5090565b5b80821115614399576000815560010161439e565b60008083601f8401126143c457600080fd5b50813567ffffffffffffffff8111156143dc57600080fd5b6020830191508360208285010111156143f457600080fd5b9250929050565b6000806000806040858703121561441157600080fd5b843567ffffffffffffffff8082111561442957600080fd5b614435888389016143b2565b9096509450602087013591508082111561444e57600080fd5b5061445b878288016143b2565b95989497509550505050565b6000815180845260005b8181101561448d57602081850181015186830182015201614471565b8181111561449f576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610bc36020830184614467565b6001600160a01b038116811461429e57600080fd5b6000602082840312156144ee57600080fd5b8135610bc3816144c7565b60006020828403121561450b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561454357614543614512565b604051601f8501601f19908116603f0116810190828211818310171561456b5761456b614512565b8160405280935085815286868601111561458457600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156145b057600080fd5b813567ffffffffffffffff8111156145c757600080fd5b8201601f810184136145d857600080fd5b6145e784823560208401614528565b949350505050565b6000806020838503121561460257600080fd5b823567ffffffffffffffff8082111561461a57600080fd5b818501915085601f83011261462e57600080fd5b81358181111561463d57600080fd5b8660208260051b850101111561465257600080fd5b60209290920196919550909350505050565b60008060006040848603121561467957600080fd5b83359250602084013567ffffffffffffffff81111561469757600080fd5b6146a3868287016143b2565b9497909650939450505050565b801515811461429e57600080fd5b600080604083850312156146d157600080fd5b82356146dc816144c7565b915060208301356146ec816146b0565b809150509250929050565b60006101006001600160a01b038b16835289602084015288604084015280606084015287518184015250602087015161012083015260408701516101408301526060870151610160830152608087015160a061018084015261475d6101a0840182614467565b9150508560808301528460a08301528360c083015261478060e083018415159052565b9998505050505050505050565b6000806000806000606086880312156147a557600080fd5b85359450602086013567ffffffffffffffff808211156147c457600080fd5b6147d089838a016143b2565b909650945060408801359150808211156147e957600080fd5b506147f6888289016143b2565b969995985093965092949392505050565b600082601f83011261481857600080fd5b610bc383833560208501614528565b6000806040838503121561483a57600080fd5b823567ffffffffffffffff8082111561485257600080fd5b61485e86838701614807565b9350602085013591508082111561487457600080fd5b5061488185828601614807565b9150509250929050565b600080600080600080608087890312156148a457600080fd5b86359550602087013567ffffffffffffffff808211156148c357600080fd5b9088019060a0828b0312156148d757600080fd5b909550604088013590808211156148ed57600080fd5b6148f98a838b016143b2565b9096509450606089013591508082111561491257600080fd5b5061491f89828a016143b2565b979a9699509497509295939492505050565b6000806040838503121561494457600080fd5b50508035926020909101359150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361499257614992614969565b5060010190565b6000828210156149ab576149ab614969565b500390565b6000816149bf576149bf614969565b506000190190565b6000602082840312156149d957600080fd5b8151610bc3816146b0565b6000602082840312156149f657600080fd5b8151610bc3816144c7565b60008219821115614a1457614a14614969565b500190565b600181811c90821680614a2d57607f821691505b602082108103614a4d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000614a5f8254614a19565b82601f821115614a755783600052602060002090505b5491506020811015614a4d5760001960209190910360031b1b16919050565b8183823760009101908152919050565b600060208284031215614ab657600080fd5b5051919050565b80516020808301519190811015614a4d5760001960209190910360031b1b16919050565b601f8211156114f057600081815260208120601f850160051c81016020861015614b085750805b601f850160051c820191505b81811015614b2757828155600101614b14565b505050505050565b67ffffffffffffffff831115614b4757614b47614512565b614b5b83614b558354614a19565b83614ae1565b6000601f841160018114614b8f5760008515614b775750838201355b600019600387901b1c1916600186901b178355614279565b600083815260209020601f19861690835b82811015614bc05786850135825560209485019460019092019101614ba0565b5086821015614bdd5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815167ffffffffffffffff811115614c0957614c09614512565b614c1d81614c178454614a19565b84614ae1565b602080601f831160018114614c525760008415614c3a5750858301515b600019600386901b1c1916600185901b178555614b27565b600085815260208120601f198616915b82811015614c8157888601518255948401946001909101908401614c62565b5085821015614c9f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000816000190483118215151615614cc957614cc9614969565b500290565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b80358252602081013560208301526040810135604083015260608101356060830152600060808201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112614d5257600080fd5b820160208101903567ffffffffffffffff811115614d6f57600080fd5b803603821315614d7e57600080fd5b60a06080860152614d9360a086018284614cce565b95945050505050565b602081526000610bc36020830184614cf9565b600060a08236031215614dc157600080fd5b60405160a0810167ffffffffffffffff8282108183111715614de557614de5614512565b81604052843583526020850135602084015260408501356040840152606085013560608401526080850135915080821115614e1f57600080fd5b50614e2c36828601614807565b60808301525092915050565b848152836020820152608060408201526000614e576080830185614cf9565b905082606083015295945050505050565b600061ffff808316818516808303821115614e8557614e85614969565b01949350505050565b600061ffff83811690831681811015614ea957614ea9614969565b039392505050565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082614eec57614eec614ec7565b500490565b600082614f0057614f00614ec7565b500690565b600060ff821660ff841680821015614f1f57614f1f614969565b90039392505050565b600060ff821660ff84168060ff03821115614f4557614f45614969565b019392505050565b8381526001600160a01b03831660208201526060810160058310614f8157634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b80548252600060018083015460208181870152600285015460408701526003850154606087015260048501915060a0608087015260008254614fd081614a19565b8060a08a015260c086831660008114614ff0576001811461500a57615038565b60ff198416828c01528183151560051b8c01019450615038565b866000528560002060005b848110156150305781548d8201850152908901908701615015565b8c0183019550505b50929998505050505050505050565b602081526000610bc36020830184614f8f565b8281526040602082015260006145e76040830184614f8f565b8481528360208201528260408201526080606082015260006150986080830184614467565b969550505050505056fea2646970667358221220ccb43705a238e81db2fa2d88c2fc81e76f89b3f50ba06dd69f6cf627fd5f9ad064736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
