{
  "_format": "hh-sol-artifact-1",
  "contractName": "NameWrapper",
  "sourceName": "contracts/wrapper/NameWrapper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ENS",
          "name": "_ens",
          "type": "address"
        },
        {
          "internalType": "contract BaseRegistrar",
          "name": "_registrar",
          "type": "address"
        },
        {
          "internalType": "contract IMetadataService",
          "name": "_metadataService",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "controller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        }
      ],
      "name": "ControllerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "fuses",
          "type": "uint96"
        }
      ],
      "name": "FusesBurned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "NameUnwrapped",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "fuses",
          "type": "uint96"
        }
      ],
      "name": "NameWrapped",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "TransferBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "TransferSingle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "value",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "URI",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "_tokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "uint96",
          "name": "fuseMask",
          "type": "uint96"
        }
      ],
      "name": "allFusesBurned",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        }
      ],
      "name": "balanceOfBatch",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "uint96",
          "name": "_fuses",
          "type": "uint96"
        }
      ],
      "name": "burnFuses",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "controllers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "internalType": "contract ENS",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getData",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "fuses",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "getFuses",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "fuses",
          "type": "uint96"
        },
        {
          "internalType": "enum INameWrapper.NameSafety",
          "name": "vulnerability",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "vulnerableNode",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "isTokenOwnerOrApproved",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "metadataService",
      "outputs": [
        {
          "internalType": "contract IMetadataService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "names",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "label",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "wrappedOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "_fuses",
          "type": "uint96"
        }
      ],
      "name": "registerAndWrapETH2LD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "expires",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registrar",
      "outputs": [
        {
          "internalType": "contract BaseRegistrar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "renew",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "expires",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeBatchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "controller",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        }
      ],
      "name": "setController",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IMetadataService",
          "name": "_newMetadataService",
          "type": "address"
        }
      ],
      "name": "setMetadataService",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "setRecord",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "setResolver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "parentNode",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setSubnodeOwner",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "parentNode",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "label",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "_fuses",
          "type": "uint96"
        }
      ],
      "name": "setSubnodeOwnerAndWrap",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "parentNode",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "setSubnodeRecord",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "parentNode",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "label",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        },
        {
          "internalType": "uint96",
          "name": "_fuses",
          "type": "uint96"
        }
      ],
      "name": "setSubnodeRecordAndWrap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "ttl",
          "type": "uint64"
        }
      ],
      "name": "setTTL",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "parentNode",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newController",
          "type": "address"
        }
      ],
      "name": "unwrap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "label",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newRegistrant",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newController",
          "type": "address"
        }
      ],
      "name": "unwrapETH2LD",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "uri",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "wrappedOwner",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "_fuses",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "wrap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "label",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "wrappedOwner",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "_fuses",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "wrapETH2LD",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b5060405162005c2738038062005c27833981016040819052620000349162000338565b6200003f3362000160565b6001600160601b0319606084811b821660805283901b1660a052600480546001600160a01b0383166001600160a01b03199091161790556200009460008051602062005c0783398151915260006041620001b0565b620000a36000806041620001b0565b604080518082019091526001815260006020808301828152918052600590529051620000f1917f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc9162000292565b50604080518082019091526005808252626cae8d60e31b602080840191825260008051602062005c0783398151915260005291909152905162000156917fd99130487705d6970718a0cee91984b61956f8a1db3482bba7e6bf0131adb01f9162000292565b50505050620003e1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160601b0381161580620001c957506001811615155b620002405760405162461bcd60e51b815260206004820152603760248201527f4e616d65577261707065723a2043616e6e6f74206275726e2066757365733a2060448201527f646f6d61696e2063616e20626520756e77726170706564000000000000000000606482015260840160405180910390fd5b620002588383836200025d60201b620035f31760201c565b505050565b60a0816001600160601b0316901b826001600160a01b0316176001600085815260200190815260200160002081905550505050565b828054620002a0906200038b565b90600052602060002090601f016020900481019282620002c457600085556200030f565b82601f10620002df57805160ff19168380011785556200030f565b828001600101855582156200030f579182015b828111156200030f578251825591602001919060010190620002f2565b506200031d92915062000321565b5090565b5b808211156200031d576000815560010162000322565b6000806000606084860312156200034d578283fd5b83516200035a81620003c8565b60208501519093506200036d81620003c8565b60408501519092506200038081620003c8565b809150509250925092565b600181811c90821680620003a057607f821691505b60208210811415620003c257634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b0381168114620003de57600080fd5b50565b60805160601c60a05160601c615752620004b56000396000818161041601528181610d6401528181610eea01528181611f3f01528181612575015281816127a0015281816128a2015281816129f901528181612a8801528181612d67015261444601526000818161047b015281816108fd01528181610a7b01528181610cea0152818161116801528181611ab101528181611c47015281816121240152818161222601528181612360015281816123f201528181612f53015281816137fd01528181613ffe015261452701526157526000f3fe608060405234801561001057600080fd5b50600436106102ac5760003560e01c806363f033261161017b578063c475abff116100d8578063e985e9c51161008c578063f242432a11610071578063f242432a146106c7578063f2fde38b146106da578063f44779b9146106ed57600080fd5b8063e985e9c51461066b578063ed70554d146106a757600080fd5b8063d8c9921a116100bd578063d8c9921a14610622578063da8c229e14610635578063e0dba60f1461065857600080fd5b8063c475abff146105fc578063cf4088231461060f57600080fd5b8063a0a5a7381161012f578063a382150d11610114578063a382150d1461059d578063a456f7d8146105b0578063c1cbf66f146105e957600080fd5b8063a0a5a73814610577578063a22cb4651461058a57600080fd5b80638b4dfa75116101605780638b4dfa75146105405780638da5cb5b146105535780639c50a2e91461056457600080fd5b806363f0332614610525578063715018a61461053857600080fd5b806320c38e2b116102295780634ac07f41116101dd57806353095467116101c257806353095467146104df5780635ef2c7f0146104f25780636352211e1461050557600080fd5b80634ac07f411461049d5780634e1273f4146104bf57600080fd5b80632eb2c2d61161020e5780632eb2c2d61461045057806331ea1cf9146104635780633f15457f1461047657600080fd5b806320c38e2b146103fe5780632b20e3971461041157600080fd5b80630e89341c11610280578063150b7a0211610265578063150b7a02146103945780631534e177146103d85780631896f70a146103eb57600080fd5b80630e89341c1461035f57806314ab90381461037f57600080fd5b8062fdd58e146102b15780630178fe3f146102d757806301ffc9a71461032957806306ab59231461034c575b600080fd5b6102c46102bf366004614c3e565b610700565b6040519081526020015b60405180910390f35b6102fd6102e5366004614d48565b6000908152600160205260409020549060a082901c90565b604080516001600160a01b0390931683526bffffffffffffffffffffffff9091166020830152016102ce565b61033c610337366004614ff4565b6107bc565b60405190151581526020016102ce565b6102c461035a366004614e2d565b610812565b61037261036d366004614d48565b610b05565b6040516102ce9190615400565b61039261038d366004614fa7565b610ba1565b005b6103a76103a2366004614b39565b610d57565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102ce565b6103926103e6366004614a1f565b610f8b565b6103926103f9366004614d78565b61101f565b61037261040c366004614d48565b611197565b6104387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ce565b61039261045e366004614a8f565b611231565b610392610471366004614eb4565b6115f4565b6104387f000000000000000000000000000000000000000000000000000000000000000081565b6104b06104ab366004614d48565b611737565b6040516102ce93929190615453565b6104d26104cd366004614c69565b611852565b6040516102ce91906153bf565b600454610438906001600160a01b031681565b610392610500366004614e5a565b6119c8565b610438610513366004614d48565b60009081526001602052604090205490565b6102c4610533366004614f45565b611cb0565b610392611d79565b61039261054e366004614d9c565b611ddf565b6000546001600160a01b0316610438565b61039261057236600461502c565b611fa1565b6102c46105853660046150a5565b61249a565b610392610598366004614c11565b61264b565b6103926105ab36600461502c565b612754565b61033c6105be366004614fd2565b6000918252600160205260409091205460a01c81166bffffffffffffffffffffffff90811691161490565b6103926105f7366004614fd2565b612b32565b6102c461060a366004615226565b612cac565b61039261061d366004614ddd565b612df2565b610392610630366004614e2d565b612fb9565b61033c610643366004614a1f565b60036020526000908152604090205460ff1681565b610392610666366004614c11565b61312a565b61033c610679366004614a57565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6102c46106b5366004614d48565b60016020526000908152604090205481565b6103926106d5366004614baa565b613202565b6103926106e8366004614a1f565b6134b5565b61033c6106fb366004614d78565b613597565b60006001600160a01b0383166107835760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000828152600160205260409020546001600160a01b0380821690851614156107b05760019150506107b6565b60009150505b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7d5df6ba0000000000000000000000000000000000000000000000000000000014806107b657506107b68261362d565b60008361081f8133613597565b6108915760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b60408051602080820188905281830187905282518083038401815260609092019092528051910120859085906000906040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be39060240160206040518083038186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190614a3b565b60008581526001602052604090205490915060a01c6001600160a01b0382161580156109a4575060208116155b806109c357506001600160a01b038216158015906109c3575060408116155b610a355760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f06ab5923000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a90526001600160a01b0389811660448301527f000000000000000000000000000000000000000000000000000000000000000016906306ab592390606401602060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190614d60565b9a9950505050505050505050565b600480546040517f0e89341c0000000000000000000000000000000000000000000000000000000081529182018390526060916001600160a01b0390911690630e89341c9060240160006040518083038186803b158015610b6557600080fd5b505afa158015610b79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b69190810190615124565b81610bac8133613597565b610c1e5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b600083815260016020526040902054839060109060a01c80821615610cab5760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f14ab90380000000000000000000000000000000000000000000000000000000081526004810187905267ffffffffffffffff861660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906314ab9038906044015b600060405180830381600087803b158015610d3757600080fd5b505af1158015610d4b573d6000803e3d6000fd5b50505050505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610df75760405162461bcd60e51b815260206004820152603e60248201527f4e616d65577261707065723a2057726170706572206f6e6c7920737570706f7260448201527f7473202e6574682045524337323120746f6b656e207472616e73666572730000606482015260840161077a565b6000808080610e08868801886151a2565b835160208501209397509195509350915088908114610eb55760405162461bcd60e51b815260206004820152604e60248201527f4e616d65577261707065723a20546f6b656e20696420646f6573206d6174636860448201527f206b656363616b286c6162656c29206f66206c6162656c2070726f766964656460648201527f20696e2064617461206669656c64000000000000000000000000000000000000608482015260a40161077a565b6040517f28ed4f6c000000000000000000000000000000000000000000000000000000008152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906328ed4f6c90604401600060405180830381600087803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b50505050610f5a85858585613710565b507f150b7a02000000000000000000000000000000000000000000000000000000009b9a5050505050505050505050565b6000546001600160a01b03163314610fe55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b8161102a8133613597565b61109c5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b600083815260016020526040902054839060089060a01c808216156111295760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f1896f70a000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b0386811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90604401610d1d565b600560205260009081526040902080546111b09061553e565b80601f01602080910402602001604051908101604052809291908181526020018280546111dc9061553e565b80156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b505050505081565b81518351146112a85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d61746368000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b0384166113245760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b03851633148061135e57506001600160a01b038516600090815260026020908152604080832033845290915290205460ff165b6113d05760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000606482015260840161077a565b60005b83518110156115875760008482815181106113fe57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061142a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080611453846000908152600160205260409020549060a082901c90565b91509150611462816004161590565b6114d45760405162461bcd60e51b815260206004820152603760248201527f4e616d65577261707065723a204675736520616c7265616479206275726e656460448201527f20666f72207472616e7366657272696e67206f776e6572000000000000000000606482015260840161077a565b8260011480156114f55750896001600160a01b0316826001600160a01b0316145b6115675760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e7366657200000000000000000000000000000000000000000000606482015260840161077a565b611572848a83613870565b5050505080611580906155a6565b90506113d3565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115d79291906153d2565b60405180910390a46115ed338686868686613946565b5050505050565b600086866040516116069291906152ad565b6040518091039020905060006116438983604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b9050600061171c89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508f815260056020526040902080549093506116999250905061553e565b80601f01602080910402602001604051908101604052809291908181526020018280546116c59061553e565b80156117125780601f106116e757610100808354040283529160200191611712565b820191906000526020600020905b8154815290600101906020018083116116f557829003601f168201915b5050505050613b62565b905061172b8a843089896119c8565b610d4b82828987613c34565b60008181526005602052604081208054829182918291906117579061553e565b80601f01602080910402602001604051908101604052809291908181526020018280546117839061553e565b80156117d05780601f106117a5576101008083540402835291602001916117d0565b820191906000526020600020905b8154815290600101906020018083116117b357829003601f168201915b5050505050905060008151116118285760405162461bcd60e51b815260206004820152601b60248201527f4e616d65577261707065723a204e616d65206e6f7420666f756e640000000000604482015260640161077a565b611833816000613ca1565b6000978852600160205260409097205460a01c97909695509350505050565b606081518351146118cb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d617463680000000000000000000000000000000000000000000000606482015260840161077a565b6000835167ffffffffffffffff8111156118f557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561191e578160200160208202803683370190505b50905060005b84518110156119c05761198585828151811061195057634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061197857634e487b7160e01b600052603260045260246000fd5b6020026020010151610700565b8282815181106119a557634e487b7160e01b600052603260045260246000fd5b60209081029190910101526119b9816155a6565b9050611924565b509392505050565b846119d38133613597565b611a455760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b60408051602080820189905281830188905282518083038401815260609092019092528051910120869086906000906040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be39060240160206040518083038186803b158015611af357600080fd5b505afa158015611b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2b9190614a3b565b60008581526001602052604090205490915060a01c6001600160a01b038216158015611b58575060208116155b80611b7757506001600160a01b03821615801590611b77575060408116155b611be95760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f5ef2c7f0000000000000000000000000000000000000000000000000000000008152600481018c9052602481018b90526001600160a01b038a81166044830152898116606483015267ffffffffffffffff891660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b158015611c8b57600080fd5b505af1158015611c9f573d6000803e3d6000fd5b505050505050505050505050505050565b6000808585604051611cc39291906152ad565b60405180910390209050611cfe8782604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b91506000611d5487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508d815260056020526040902080549093506116999250905061553e565b9050611d61888330610812565b50611d6e83828787613c34565b505095945050505050565b6000546001600160a01b03163314611dd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b611ddd6000613dc8565b565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae60208083019190915281830186905282518083038401815260609092019092528051910120611e338133613597565b611ea55760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae60208083019190915281830187905282518083038401815260609092019092528051910120611efa905b83613e30565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018690527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015611f8357600080fd5b505af1158015611f97573d6000803e3d6000fd5b5050505050505050565b600080611fe8600088888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506140959050565b9150915060006120318289898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061415a9050565b604080516020808201849052818301879052825180830384018152606090920190925280519101209091507f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae8214156120f25760405162461bcd60e51b815260206004820152603260248201527f4e616d65577261707065723a202e65746820646f6d61696e73206e656564207460448201527f6f207573652077726170455448324c4428290000000000000000000000000000606482015260840161077a565b6040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be39060240160206040518083038186803b15801561216e57600080fd5b505afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190614a3b565b90506001600160a01b0381163314806121e257506001600160a01b038116600090815260026020908152604080832033845290915290205460ff165b806122a057506040517fe985e9c50000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c59060440160206040518083038186803b15801561226857600080fd5b505afa15801561227c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a09190614d2c565b6123125760405162461bcd60e51b815260206004820152602e60248201527f4e616d65577261707065723a20446f6d61696e206973206e6f74206f776e656460448201527f206279207468652073656e646572000000000000000000000000000000000000606482015260840161077a565b6001600160a01b038616156123bd576040517f1896f70a000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0387811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90604401600060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505050505b6040517f5b0fc9c3000000000000000000000000000000000000000000000000000000008152600481018390523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635b0fc9c390604401600060405180830381600087803b15801561243e57600080fd5b505af1158015612452573d6000803e3d6000fd5b50505050610d4b828b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c9150613c349050565b3360009081526003602052604081205460ff1661251f5760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f60448201527f6e74726f6c6c6572000000000000000000000000000000000000000000000000606482015260840161077a565b600087876040516125319291906152ad565b6040519081900381207ffca247ac000000000000000000000000000000000000000000000000000000008252600482018190523060248301526044820187905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fca247ac90606401602060405180830381600087803b1580156125c157600080fd5b505af11580156125d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f99190614d60565b915061263f88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250879150889050613710565b50509695505050505050565b336001600160a01b03831614156126ca5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c660000000000000000000000000000000000000000000000606482015260840161077a565b3360008181526002602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600085856040516127669291906152ad565b6040519081900381207f6352211e0000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156127ea57600080fd5b505afa1580156127fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128229190614a3b565b90506001600160a01b03811633148061285e57506001600160a01b038116600090815260026020908152604080832033845290915290205460ff165b8061291c57506040517fe985e9c50000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c59060440160206040518083038186803b1580156128e457600080fd5b505afa1580156128f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291c9190614d2c565b6129b45760405162461bcd60e51b815260206004820152605f60248201527f4e616d65577261707065723a2053656e646572206973206e6f74206f776e657260448201527f206f7220617574686f726973656420627920746865206f776e6572206f72206160648201527f7574686f7269736564206f6e20746865202e6574682072656769737472617200608482015260a40161077a565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015612a3d57600080fd5b505af1158015612a51573d6000803e3d6000fd5b50506040517f28ed4f6c000000000000000000000000000000000000000000000000000000008152600481018590523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506328ed4f6c9150604401600060405180830381600087803b158015612ad657600080fd5b505af1158015612aea573d6000803e3d6000fd5b50505050611f9787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250889150879050613710565b81612b3d8133613597565b612baf5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b600083815260016020526040902054839060029060a01c80821615612c3c5760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b60008681526001602052604090205460a081901c868117612c5e898483613870565b6040516bffffffffffffffffffffffff8216815289907fdba54097f6f5ef606cfe6bd170d2a04c0601dff6d94274d5f3879349978b9f449060200160405180910390a2505050505050505050565b3360009081526003602052604081205460ff16612d315760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f60448201527f6e74726f6c6c6572000000000000000000000000000000000000000000000000606482015260840161077a565b6040517fc475abff00000000000000000000000000000000000000000000000000000000815260048101849052602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c475abff90604401602060405180830381600087803b158015612db357600080fd5b505af1158015612dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612deb9190614d60565b9392505050565b83612dfd8133613597565b612e6f5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b6000858152600160205260409020548590601c9060a01c80821615612efc5760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517fcf408823000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b038881166024830152878116604483015267ffffffffffffffff871660648301527f0000000000000000000000000000000000000000000000000000000000000000169063cf40882390608401600060405180830381600087803b158015612f9757600080fd5b505af1158015612fab573d6000803e3d6000fd5b505050505050505050505050565b60408051602080820186905281830185905282518083038401815260609092019092528051910120612feb8133613597565b61305d5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b7f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae8414156130f35760405162461bcd60e51b815260206004820152603d60248201527f4e616d65577261707065723a202e657468206e616d6573206d7573742062652060448201527f756e77726170706564207769746820756e77726170455448324c442829000000606482015260840161077a565b6040805160208082018790528183018690528251808303840181526060909201909252805191012061312490611ef4565b50505050565b6000546001600160a01b031633146131845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b6001600160a01b03821660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf8791015b60405180910390a25050565b6001600160a01b03841661327e5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b0385163314806132b857506001600160a01b038516600090815260026020908152604080832033845290915290205460ff165b61332a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f7665640000000000000000000000000000000000000000000000606482015260840161077a565b60008381526001602052604090205460a081901c60048116156133b55760405162461bcd60e51b815260206004820152603760248201527f4e616d65577261707065723a204675736520616c7265616479206275726e656460448201527f20666f72207472616e7366657272696e67206f776e6572000000000000000000606482015260840161077a565b8360011480156133d65750866001600160a01b0316826001600160a01b0316145b6134485760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e7366657200000000000000000000000000000000000000000000606482015260840161077a565b613453858783613870565b60408051868152602081018690526001600160a01b0380891692908a169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46134ac338888888888614219565b50505050505050565b6000546001600160a01b0316331461350f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b6001600160a01b03811661358b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161077a565b61359481613dc8565b50565b600082815260016020526040812054826001600160a01b0316816001600160a01b031614806135eb57506001600160a01b0380821660009081526002602090815260408083209387168352929052205460ff165b949350505050565b60a0816bffffffffffffffffffffffff16901b826001600160a01b0316176001600085815260200190815260200160002081905550505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806136c057507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806107b657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107b6565b83516020850120600061376a7f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae83604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b905060006137ad876040518060400160405280600581526020017f0365746800000000000000000000000000000000000000000000000000000000815250613b62565b90506001600160a01b0384161561385a576040517f1896f70a000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0385811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90604401600060405180830381600087803b15801561384157600080fd5b505af1158015613855573d6000803e3d6000fd5b505050505b61386682828888613c34565b5050949350505050565b6bffffffffffffffffffffffff8116158061388d57506001811615155b6138ff5760405162461bcd60e51b815260206004820152603760248201527f4e616d65577261707065723a2043616e6e6f74206275726e2066757365733a2060448201527f646f6d61696e2063616e20626520756e77726170706564000000000000000000606482015260840161077a565b60008381526001602052604090206001600160a01b0383167fffffffffffffffffffffffff000000000000000000000000000000000000000060a084901b16179055505050565b6001600160a01b0384163b15613b5a576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906139a3908990899088908890889060040161531e565b602060405180830381600087803b1580156139bd57600080fd5b505af19250505080156139ed575060408051601f3d908101601f191682019092526139ea91810190615010565b60015b613aa3576139f961560b565b806308c379a01415613a335750613a0e615623565b80613a195750613a35565b8060405162461bcd60e51b815260040161077a9190615400565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840161077a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146134ac5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e73000000000000000000000000000000000000000000000000606482015260840161077a565b505050505050565b60606000835111613bb55760405162461bcd60e51b815260206004820152601c60248201527f4e616d65577261707065723a204c6162656c20746f6f2073686f727400000000604482015260640161077a565b610100835110613c075760405162461bcd60e51b815260206004820152601b60248201527f4e616d65577261707065723a204c6162656c20746f6f206c6f6e670000000000604482015260640161077a565b82518383604051602001613c1d939291906152bd565b604051602081830303815290604052905092915050565b60008481526005602090815260409091208451613c539286019061482d565b50613c5f848383614383565b837fe4119808efe03fb44c25cc9ce9a945dfe95dc48b05cdf4a351b586630c1e6b6a848484604051613c9393929190615413565b60405180910390a250505050565b600080808080613cb18787614095565b909250905081613ccd575060009350839250829150613dc19050565b6000613cd98883613ca1565b604080516020808201869052818301899052825180830384018152606090920190925280519101209850909650945090506000856004811115613d2c57634e487b7160e01b600052602160045260246000fd5b14613d3957505050613dc1565b80613d4e575060009350839250613dc1915050565b613d598387836143ec565b90955093506000856004811115613d8057634e487b7160e01b600052602160045260246000fd5b14613d8d57505050613dc1565b600081815260016020526040908190205460a01c811614613db657600394509250613dc1915050565b506000935083925050505b9250925092565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116613eac5760405162461bcd60e51b815260206004820152602760248201527f4e616d65577261707065723a20546172676574206f776e65722063616e6e6f7460448201527f2062652030783000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b038116301415613f2b5760405162461bcd60e51b815260206004820152603c60248201527f4e616d65577261707065723a20546172676574206f776e65722063616e6e6f7460448201527f20626520746865204e616d655772617070657220636f6e747261637400000000606482015260840161077a565b60008281526001602081905260409091205460a01c81161415613fb65760405162461bcd60e51b815260206004820152602660248201527f4e616d65577261707065723a20446f6d61696e206973206e6f7420756e77726160448201527f707061626c650000000000000000000000000000000000000000000000000000606482015260840161077a565b613fbf826145c9565b6040517f5b0fc9c3000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0382811660248301527f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390604401600060405180830381600087803b15801561404257600080fd5b505af1158015614056573d6000803e3d6000fd5b50506040516001600160a01b03841681528492507fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c491506020016131f6565b600080835183106140e85760405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e64730000604482015260640161077a565b600084848151811061410a57634e487b7160e01b600052603260045260246000fd5b016020015160f81c905080156141365761412f856141298660016154e3565b83614633565b925061413b565b600092505b61414581856154e3565b6141509060016154e3565b9150509250929050565b60008060006141698585614095565b9092509050816141db576001855161418191906154fb565b84146141cf5760405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d65000000604482015260640161077a565b50600091506107b69050565b6141e5858261415a565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209250505092915050565b6001600160a01b0384163b15613b5a576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190614276908990899088908890889060040161537c565b602060405180830381600087803b15801561429057600080fd5b505af19250505080156142c0575060408051601f3d908101601f191682019092526142bd91810190615010565b60015b6142cc576139f961560b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146134ac5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e73000000000000000000000000000000000000000000000000606482015260840161077a565b6000838152600160205260409020546001600160a01b038116156143e1576143aa846145c9565b6040516000815284907fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49060200160405180910390a25b613124848484614657565b6000807f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae8314156144ee576040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b15801561449057600080fd5b505afa9250505080156144c0575060408051601f3d908101601f191682019092526144bd91810190614a3b565b60015b6144cf575060049050826145c1565b6001600160a01b03811630146144ec5760018592509250506145c1565b505b6040517f02571be30000000000000000000000000000000000000000000000000000000081526004810185905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be39060240160206040518083038186803b15801561456957600080fd5b505afa15801561457d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145a19190614a3b565b6001600160a01b0316146145ba575060029050826145c1565b5060009050805b935093915050565b60008181526001602052604081205490506145e682600080613870565b60408051838152600160208201526000916001600160a01b0384169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050565b825160009061464283856154e3565b111561464d57600080fd5b5091016020012090565b60008381526001602052604090205483906001600160a01b038116156146bf5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a206d696e74206f66206578697374696e6720746f6b656e00604482015260640161077a565b6001600160a01b03841661473b5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b0384163014156147ba5760405162461bcd60e51b815260206004820152603460248201527f455243313135353a206e65774f776e65722063616e6e6f74206265207468652060448201527f4e616d655772617070657220636f6e7472616374000000000000000000000000606482015260840161077a565b6147c5828585613870565b60408051838152600160208201526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46115ed3360008685600160405180602001604052806000815250614219565b8280546148399061553e565b90600052602060002090601f01602090048101928261485b57600085556148a1565b82601f1061487457805160ff19168380011785556148a1565b828001600101855582156148a1579182015b828111156148a1578251825591602001919060010190614886565b506148ad9291506148b1565b5090565b5b808211156148ad57600081556001016148b2565b60006148d1836154bb565b6040516148de8282615579565b8092508481528585850111156148f357600080fd5b8484602083013760006020868301015250509392505050565b600082601f83011261491c578081fd5b8135602061492982615497565b6040516149368282615579565b8381528281019150858301600585901b87018401881015614955578586fd5b855b8581101561497357813584529284019290840190600101614957565b5090979650505050505050565b60008083601f840112614991578182fd5b50813567ffffffffffffffff8111156149a8578182fd5b6020830191508360208285010111156149c057600080fd5b9250929050565b600082601f8301126149d7578081fd5b612deb838335602085016148c6565b803567ffffffffffffffff811681146149fe57600080fd5b919050565b80356bffffffffffffffffffffffff811681146149fe57600080fd5b600060208284031215614a30578081fd5b8135612deb816156cb565b600060208284031215614a4c578081fd5b8151612deb816156cb565b60008060408385031215614a69578081fd5b8235614a74816156cb565b91506020830135614a84816156cb565b809150509250929050565b600080600080600060a08688031215614aa6578081fd5b8535614ab1816156cb565b94506020860135614ac1816156cb565b9350604086013567ffffffffffffffff80821115614add578283fd5b614ae989838a0161490c565b94506060880135915080821115614afe578283fd5b614b0a89838a0161490c565b93506080880135915080821115614b1f578283fd5b50614b2c888289016149c7565b9150509295509295909350565b600080600080600060808688031215614b50578283fd5b8535614b5b816156cb565b94506020860135614b6b816156cb565b935060408601359250606086013567ffffffffffffffff811115614b8d578182fd5b614b9988828901614980565b969995985093965092949392505050565b600080600080600060a08688031215614bc1578283fd5b8535614bcc816156cb565b94506020860135614bdc816156cb565b93506040860135925060608601359150608086013567ffffffffffffffff811115614c05578182fd5b614b2c888289016149c7565b60008060408385031215614c23578182fd5b8235614c2e816156cb565b91506020830135614a84816156e0565b60008060408385031215614c50578182fd5b8235614c5b816156cb565b946020939093013593505050565b60008060408385031215614c7b578182fd5b823567ffffffffffffffff80821115614c92578384fd5b818501915085601f830112614ca5578384fd5b81356020614cb282615497565b604051614cbf8282615579565b8381528281019150858301600585901b870184018b1015614cde578889fd5b8896505b84871015614d09578035614cf5816156cb565b835260019690960195918301918301614ce2565b5096505086013592505080821115614d1f578283fd5b506141508582860161490c565b600060208284031215614d3d578081fd5b8151612deb816156e0565b600060208284031215614d59578081fd5b5035919050565b600060208284031215614d71578081fd5b5051919050565b60008060408385031215614d8a578182fd5b823591506020830135614a84816156cb565b600080600060608486031215614db0578081fd5b833592506020840135614dc2816156cb565b91506040840135614dd2816156cb565b809150509250925092565b60008060008060808587031215614df2578182fd5b843593506020850135614e04816156cb565b92506040850135614e14816156cb565b9150614e22606086016149e6565b905092959194509250565b600080600060608486031215614e41578081fd5b83359250602084013591506040840135614dd2816156cb565b600080600080600060a08688031215614e71578283fd5b85359450602086013593506040860135614e8a816156cb565b92506060860135614e9a816156cb565b9150614ea8608087016149e6565b90509295509295909350565b600080600080600080600060c0888a031215614ece578485fd5b87359650602088013567ffffffffffffffff811115614eeb578586fd5b614ef78a828b01614980565b9097509550506040880135614f0b816156cb565b93506060880135614f1b816156cb565b9250614f29608089016149e6565b9150614f3760a08901614a03565b905092959891949750929550565b600080600080600060808688031215614f5c578283fd5b85359450602086013567ffffffffffffffff811115614f79578384fd5b614f8588828901614980565b9095509350506040860135614f99816156cb565b9150614ea860608701614a03565b60008060408385031215614fb9578182fd5b82359150614fc9602084016149e6565b90509250929050565b60008060408385031215614fe4578182fd5b82359150614fc960208401614a03565b600060208284031215615005578081fd5b8135612deb816156ee565b600060208284031215615021578081fd5b8151612deb816156ee565b600080600080600060808688031215615043578283fd5b853567ffffffffffffffff811115615059578384fd5b61506588828901614980565b9096509450506020860135615079816156cb565b925061508760408701614a03565b91506060860135615097816156cb565b809150509295509295909350565b60008060008060008060a087890312156150bd578384fd5b863567ffffffffffffffff8111156150d3578485fd5b6150df89828a01614980565b90975095505060208701356150f3816156cb565b935060408701359250606087013561510a816156cb565b915061511860808801614a03565b90509295509295509295565b600060208284031215615135578081fd5b815167ffffffffffffffff81111561514b578182fd5b8201601f8101841361515b578182fd5b8051615166816154bb565b6040516151738282615579565b828152866020848601011115615187578485fd5b615198836020830160208701615512565b9695505050505050565b600080600080608085870312156151b7578182fd5b843567ffffffffffffffff8111156151cd578283fd5b8501601f810187136151dd578283fd5b6151ec878235602084016148c6565b94505060208501356151fd816156cb565b925061520b60408601614a03565b9150606085013561521b816156cb565b939692955090935050565b60008060408385031215615238578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156152765781518752958201959082019060010161525a565b509495945050505050565b60008151808452615299816020860160208601615512565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b7fff000000000000000000000000000000000000000000000000000000000000008460f81b168152600083516152fa816001850160208801615512565b835190830190615311816001840160208801615512565b0160010195945050505050565b60006001600160a01b03808816835280871660208401525060a0604083015261534a60a0830186615247565b828103606084015261535c8186615247565b905082810360808401526153708185615281565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526153b460a0830184615281565b979650505050505050565b602081526000612deb6020830184615247565b6040815260006153e56040830185615247565b82810360208401526153f78185615247565b95945050505050565b602081526000612deb6020830184615281565b6060815260006154266060830186615281565b90506001600160a01b03841660208301526bffffffffffffffffffffffff83166040830152949350505050565b6bffffffffffffffffffffffff84168152606081016005841061548657634e487b7160e01b600052602160045260246000fd5b602082019390935260400152919050565b600067ffffffffffffffff8211156154b1576154b16155f5565b5060051b60200190565b600067ffffffffffffffff8211156154d5576154d56155f5565b50601f01601f191660200190565b600082198211156154f6576154f66155df565b500190565b60008282101561550d5761550d6155df565b500390565b60005b8381101561552d578181015183820152602001615515565b838111156131245750506000910152565b600181811c9082168061555257607f821691505b6020821081141561557357634e487b7160e01b600052602260045260246000fd5b50919050565b601f19601f830116810181811067ffffffffffffffff8211171561559f5761559f6155f5565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155d8576155d86155df565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561562057600481823e5160e01c5b90565b600060443d10156156315790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561567f57505050505090565b82850191508151818111156156975750505050505090565b843d87010160208285010111156156b15750505050505090565b6156c060208286010187615579565b509095945050505050565b6001600160a01b038116811461359457600080fd5b801515811461359457600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461359457600080fdfea26469706673582212206b49b8092c7392c0a2b4c70a0fd278560b01901786eae2427019b38d2f788be364736f6c6343000804003393cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ac5760003560e01c806363f033261161017b578063c475abff116100d8578063e985e9c51161008c578063f242432a11610071578063f242432a146106c7578063f2fde38b146106da578063f44779b9146106ed57600080fd5b8063e985e9c51461066b578063ed70554d146106a757600080fd5b8063d8c9921a116100bd578063d8c9921a14610622578063da8c229e14610635578063e0dba60f1461065857600080fd5b8063c475abff146105fc578063cf4088231461060f57600080fd5b8063a0a5a7381161012f578063a382150d11610114578063a382150d1461059d578063a456f7d8146105b0578063c1cbf66f146105e957600080fd5b8063a0a5a73814610577578063a22cb4651461058a57600080fd5b80638b4dfa75116101605780638b4dfa75146105405780638da5cb5b146105535780639c50a2e91461056457600080fd5b806363f0332614610525578063715018a61461053857600080fd5b806320c38e2b116102295780634ac07f41116101dd57806353095467116101c257806353095467146104df5780635ef2c7f0146104f25780636352211e1461050557600080fd5b80634ac07f411461049d5780634e1273f4146104bf57600080fd5b80632eb2c2d61161020e5780632eb2c2d61461045057806331ea1cf9146104635780633f15457f1461047657600080fd5b806320c38e2b146103fe5780632b20e3971461041157600080fd5b80630e89341c11610280578063150b7a0211610265578063150b7a02146103945780631534e177146103d85780631896f70a146103eb57600080fd5b80630e89341c1461035f57806314ab90381461037f57600080fd5b8062fdd58e146102b15780630178fe3f146102d757806301ffc9a71461032957806306ab59231461034c575b600080fd5b6102c46102bf366004614c3e565b610700565b6040519081526020015b60405180910390f35b6102fd6102e5366004614d48565b6000908152600160205260409020549060a082901c90565b604080516001600160a01b0390931683526bffffffffffffffffffffffff9091166020830152016102ce565b61033c610337366004614ff4565b6107bc565b60405190151581526020016102ce565b6102c461035a366004614e2d565b610812565b61037261036d366004614d48565b610b05565b6040516102ce9190615400565b61039261038d366004614fa7565b610ba1565b005b6103a76103a2366004614b39565b610d57565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102ce565b6103926103e6366004614a1f565b610f8b565b6103926103f9366004614d78565b61101f565b61037261040c366004614d48565b611197565b6104387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ce565b61039261045e366004614a8f565b611231565b610392610471366004614eb4565b6115f4565b6104387f000000000000000000000000000000000000000000000000000000000000000081565b6104b06104ab366004614d48565b611737565b6040516102ce93929190615453565b6104d26104cd366004614c69565b611852565b6040516102ce91906153bf565b600454610438906001600160a01b031681565b610392610500366004614e5a565b6119c8565b610438610513366004614d48565b60009081526001602052604090205490565b6102c4610533366004614f45565b611cb0565b610392611d79565b61039261054e366004614d9c565b611ddf565b6000546001600160a01b0316610438565b61039261057236600461502c565b611fa1565b6102c46105853660046150a5565b61249a565b610392610598366004614c11565b61264b565b6103926105ab36600461502c565b612754565b61033c6105be366004614fd2565b6000918252600160205260409091205460a01c81166bffffffffffffffffffffffff90811691161490565b6103926105f7366004614fd2565b612b32565b6102c461060a366004615226565b612cac565b61039261061d366004614ddd565b612df2565b610392610630366004614e2d565b612fb9565b61033c610643366004614a1f565b60036020526000908152604090205460ff1681565b610392610666366004614c11565b61312a565b61033c610679366004614a57565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6102c46106b5366004614d48565b60016020526000908152604090205481565b6103926106d5366004614baa565b613202565b6103926106e8366004614a1f565b6134b5565b61033c6106fb366004614d78565b613597565b60006001600160a01b0383166107835760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000828152600160205260409020546001600160a01b0380821690851614156107b05760019150506107b6565b60009150505b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7d5df6ba0000000000000000000000000000000000000000000000000000000014806107b657506107b68261362d565b60008361081f8133613597565b6108915760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b60408051602080820188905281830187905282518083038401815260609092019092528051910120859085906000906040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be39060240160206040518083038186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190614a3b565b60008581526001602052604090205490915060a01c6001600160a01b0382161580156109a4575060208116155b806109c357506001600160a01b038216158015906109c3575060408116155b610a355760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f06ab5923000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a90526001600160a01b0389811660448301527f000000000000000000000000000000000000000000000000000000000000000016906306ab592390606401602060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190614d60565b9a9950505050505050505050565b600480546040517f0e89341c0000000000000000000000000000000000000000000000000000000081529182018390526060916001600160a01b0390911690630e89341c9060240160006040518083038186803b158015610b6557600080fd5b505afa158015610b79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b69190810190615124565b81610bac8133613597565b610c1e5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b600083815260016020526040902054839060109060a01c80821615610cab5760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f14ab90380000000000000000000000000000000000000000000000000000000081526004810187905267ffffffffffffffff861660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906314ab9038906044015b600060405180830381600087803b158015610d3757600080fd5b505af1158015610d4b573d6000803e3d6000fd5b50505050505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610df75760405162461bcd60e51b815260206004820152603e60248201527f4e616d65577261707065723a2057726170706572206f6e6c7920737570706f7260448201527f7473202e6574682045524337323120746f6b656e207472616e73666572730000606482015260840161077a565b6000808080610e08868801886151a2565b835160208501209397509195509350915088908114610eb55760405162461bcd60e51b815260206004820152604e60248201527f4e616d65577261707065723a20546f6b656e20696420646f6573206d6174636860448201527f206b656363616b286c6162656c29206f66206c6162656c2070726f766964656460648201527f20696e2064617461206669656c64000000000000000000000000000000000000608482015260a40161077a565b6040517f28ed4f6c000000000000000000000000000000000000000000000000000000008152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906328ed4f6c90604401600060405180830381600087803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b50505050610f5a85858585613710565b507f150b7a02000000000000000000000000000000000000000000000000000000009b9a5050505050505050505050565b6000546001600160a01b03163314610fe55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b8161102a8133613597565b61109c5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b600083815260016020526040902054839060089060a01c808216156111295760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f1896f70a000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b0386811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90604401610d1d565b600560205260009081526040902080546111b09061553e565b80601f01602080910402602001604051908101604052809291908181526020018280546111dc9061553e565b80156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b505050505081565b81518351146112a85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d61746368000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b0384166113245760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b03851633148061135e57506001600160a01b038516600090815260026020908152604080832033845290915290205460ff165b6113d05760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000606482015260840161077a565b60005b83518110156115875760008482815181106113fe57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061142a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080611453846000908152600160205260409020549060a082901c90565b91509150611462816004161590565b6114d45760405162461bcd60e51b815260206004820152603760248201527f4e616d65577261707065723a204675736520616c7265616479206275726e656460448201527f20666f72207472616e7366657272696e67206f776e6572000000000000000000606482015260840161077a565b8260011480156114f55750896001600160a01b0316826001600160a01b0316145b6115675760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e7366657200000000000000000000000000000000000000000000606482015260840161077a565b611572848a83613870565b5050505080611580906155a6565b90506113d3565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115d79291906153d2565b60405180910390a46115ed338686868686613946565b5050505050565b600086866040516116069291906152ad565b6040518091039020905060006116438983604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b9050600061171c89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508f815260056020526040902080549093506116999250905061553e565b80601f01602080910402602001604051908101604052809291908181526020018280546116c59061553e565b80156117125780601f106116e757610100808354040283529160200191611712565b820191906000526020600020905b8154815290600101906020018083116116f557829003601f168201915b5050505050613b62565b905061172b8a843089896119c8565b610d4b82828987613c34565b60008181526005602052604081208054829182918291906117579061553e565b80601f01602080910402602001604051908101604052809291908181526020018280546117839061553e565b80156117d05780601f106117a5576101008083540402835291602001916117d0565b820191906000526020600020905b8154815290600101906020018083116117b357829003601f168201915b5050505050905060008151116118285760405162461bcd60e51b815260206004820152601b60248201527f4e616d65577261707065723a204e616d65206e6f7420666f756e640000000000604482015260640161077a565b611833816000613ca1565b6000978852600160205260409097205460a01c97909695509350505050565b606081518351146118cb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d617463680000000000000000000000000000000000000000000000606482015260840161077a565b6000835167ffffffffffffffff8111156118f557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561191e578160200160208202803683370190505b50905060005b84518110156119c05761198585828151811061195057634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061197857634e487b7160e01b600052603260045260246000fd5b6020026020010151610700565b8282815181106119a557634e487b7160e01b600052603260045260246000fd5b60209081029190910101526119b9816155a6565b9050611924565b509392505050565b846119d38133613597565b611a455760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b60408051602080820189905281830188905282518083038401815260609092019092528051910120869086906000906040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be39060240160206040518083038186803b158015611af357600080fd5b505afa158015611b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2b9190614a3b565b60008581526001602052604090205490915060a01c6001600160a01b038216158015611b58575060208116155b80611b7757506001600160a01b03821615801590611b77575060408116155b611be95760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517f5ef2c7f0000000000000000000000000000000000000000000000000000000008152600481018c9052602481018b90526001600160a01b038a81166044830152898116606483015267ffffffffffffffff891660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b158015611c8b57600080fd5b505af1158015611c9f573d6000803e3d6000fd5b505050505050505050505050505050565b6000808585604051611cc39291906152ad565b60405180910390209050611cfe8782604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b91506000611d5487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508d815260056020526040902080549093506116999250905061553e565b9050611d61888330610812565b50611d6e83828787613c34565b505095945050505050565b6000546001600160a01b03163314611dd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b611ddd6000613dc8565b565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae60208083019190915281830186905282518083038401815260609092019092528051910120611e338133613597565b611ea55760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae60208083019190915281830187905282518083038401815260609092019092528051910120611efa905b83613e30565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018690527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015611f8357600080fd5b505af1158015611f97573d6000803e3d6000fd5b5050505050505050565b600080611fe8600088888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506140959050565b9150915060006120318289898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061415a9050565b604080516020808201849052818301879052825180830384018152606090920190925280519101209091507f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae8214156120f25760405162461bcd60e51b815260206004820152603260248201527f4e616d65577261707065723a202e65746820646f6d61696e73206e656564207460448201527f6f207573652077726170455448324c4428290000000000000000000000000000606482015260840161077a565b6040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be39060240160206040518083038186803b15801561216e57600080fd5b505afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190614a3b565b90506001600160a01b0381163314806121e257506001600160a01b038116600090815260026020908152604080832033845290915290205460ff165b806122a057506040517fe985e9c50000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c59060440160206040518083038186803b15801561226857600080fd5b505afa15801561227c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a09190614d2c565b6123125760405162461bcd60e51b815260206004820152602e60248201527f4e616d65577261707065723a20446f6d61696e206973206e6f74206f776e656460448201527f206279207468652073656e646572000000000000000000000000000000000000606482015260840161077a565b6001600160a01b038616156123bd576040517f1896f70a000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0387811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90604401600060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505050505b6040517f5b0fc9c3000000000000000000000000000000000000000000000000000000008152600481018390523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635b0fc9c390604401600060405180830381600087803b15801561243e57600080fd5b505af1158015612452573d6000803e3d6000fd5b50505050610d4b828b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c9150613c349050565b3360009081526003602052604081205460ff1661251f5760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f60448201527f6e74726f6c6c6572000000000000000000000000000000000000000000000000606482015260840161077a565b600087876040516125319291906152ad565b6040519081900381207ffca247ac000000000000000000000000000000000000000000000000000000008252600482018190523060248301526044820187905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fca247ac90606401602060405180830381600087803b1580156125c157600080fd5b505af11580156125d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f99190614d60565b915061263f88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250879150889050613710565b50509695505050505050565b336001600160a01b03831614156126ca5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c660000000000000000000000000000000000000000000000606482015260840161077a565b3360008181526002602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600085856040516127669291906152ad565b6040519081900381207f6352211e0000000000000000000000000000000000000000000000000000000082526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156127ea57600080fd5b505afa1580156127fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128229190614a3b565b90506001600160a01b03811633148061285e57506001600160a01b038116600090815260026020908152604080832033845290915290205460ff165b8061291c57506040517fe985e9c50000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c59060440160206040518083038186803b1580156128e457600080fd5b505afa1580156128f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291c9190614d2c565b6129b45760405162461bcd60e51b815260206004820152605f60248201527f4e616d65577261707065723a2053656e646572206973206e6f74206f776e657260448201527f206f7220617574686f726973656420627920746865206f776e6572206f72206160648201527f7574686f7269736564206f6e20746865202e6574682072656769737472617200608482015260a40161077a565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015612a3d57600080fd5b505af1158015612a51573d6000803e3d6000fd5b50506040517f28ed4f6c000000000000000000000000000000000000000000000000000000008152600481018590523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506328ed4f6c9150604401600060405180830381600087803b158015612ad657600080fd5b505af1158015612aea573d6000803e3d6000fd5b50505050611f9787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250889150879050613710565b81612b3d8133613597565b612baf5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b600083815260016020526040902054839060029060a01c80821615612c3c5760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b60008681526001602052604090205460a081901c868117612c5e898483613870565b6040516bffffffffffffffffffffffff8216815289907fdba54097f6f5ef606cfe6bd170d2a04c0601dff6d94274d5f3879349978b9f449060200160405180910390a2505050505050505050565b3360009081526003602052604081205460ff16612d315760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f60448201527f6e74726f6c6c6572000000000000000000000000000000000000000000000000606482015260840161077a565b6040517fc475abff00000000000000000000000000000000000000000000000000000000815260048101849052602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c475abff90604401602060405180830381600087803b158015612db357600080fd5b505af1158015612dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612deb9190614d60565b9392505050565b83612dfd8133613597565b612e6f5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b6000858152600160205260409020548590601c9060a01c80821615612efc5760405162461bcd60e51b815260206004820152602a60248201527f4e616d65577261707065723a204f7065726174696f6e2070726f68696269746560448201527f6420627920667573657300000000000000000000000000000000000000000000606482015260840161077a565b6040517fcf408823000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b038881166024830152878116604483015267ffffffffffffffff871660648301527f0000000000000000000000000000000000000000000000000000000000000000169063cf40882390608401600060405180830381600087803b158015612f9757600080fd5b505af1158015612fab573d6000803e3d6000fd5b505050505050505050505050565b60408051602080820186905281830185905282518083038401815260609092019092528051910120612feb8133613597565b61305d5760405162461bcd60e51b815260206004820152603460248201527f4e616d65577261707065723a206d73672e73656e646572206973206e6f74207460448201527f6865206f776e6572206f7220617070726f766564000000000000000000000000606482015260840161077a565b7f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae8414156130f35760405162461bcd60e51b815260206004820152603d60248201527f4e616d65577261707065723a202e657468206e616d6573206d7573742062652060448201527f756e77726170706564207769746820756e77726170455448324c442829000000606482015260840161077a565b6040805160208082018790528183018690528251808303840181526060909201909252805191012061312490611ef4565b50505050565b6000546001600160a01b031633146131845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b6001600160a01b03821660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf8791015b60405180910390a25050565b6001600160a01b03841661327e5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b0385163314806132b857506001600160a01b038516600090815260026020908152604080832033845290915290205460ff165b61332a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f7665640000000000000000000000000000000000000000000000606482015260840161077a565b60008381526001602052604090205460a081901c60048116156133b55760405162461bcd60e51b815260206004820152603760248201527f4e616d65577261707065723a204675736520616c7265616479206275726e656460448201527f20666f72207472616e7366657272696e67206f776e6572000000000000000000606482015260840161077a565b8360011480156133d65750866001600160a01b0316826001600160a01b0316145b6134485760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e7366657200000000000000000000000000000000000000000000606482015260840161077a565b613453858783613870565b60408051868152602081018690526001600160a01b0380891692908a169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46134ac338888888888614219565b50505050505050565b6000546001600160a01b0316331461350f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077a565b6001600160a01b03811661358b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161077a565b61359481613dc8565b50565b600082815260016020526040812054826001600160a01b0316816001600160a01b031614806135eb57506001600160a01b0380821660009081526002602090815260408083209387168352929052205460ff165b949350505050565b60a0816bffffffffffffffffffffffff16901b826001600160a01b0316176001600085815260200190815260200160002081905550505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806136c057507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806107b657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107b6565b83516020850120600061376a7f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae83604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b905060006137ad876040518060400160405280600581526020017f0365746800000000000000000000000000000000000000000000000000000000815250613b62565b90506001600160a01b0384161561385a576040517f1896f70a000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0385811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90604401600060405180830381600087803b15801561384157600080fd5b505af1158015613855573d6000803e3d6000fd5b505050505b61386682828888613c34565b5050949350505050565b6bffffffffffffffffffffffff8116158061388d57506001811615155b6138ff5760405162461bcd60e51b815260206004820152603760248201527f4e616d65577261707065723a2043616e6e6f74206275726e2066757365733a2060448201527f646f6d61696e2063616e20626520756e77726170706564000000000000000000606482015260840161077a565b60008381526001602052604090206001600160a01b0383167fffffffffffffffffffffffff000000000000000000000000000000000000000060a084901b16179055505050565b6001600160a01b0384163b15613b5a576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906139a3908990899088908890889060040161531e565b602060405180830381600087803b1580156139bd57600080fd5b505af19250505080156139ed575060408051601f3d908101601f191682019092526139ea91810190615010565b60015b613aa3576139f961560b565b806308c379a01415613a335750613a0e615623565b80613a195750613a35565b8060405162461bcd60e51b815260040161077a9190615400565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840161077a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146134ac5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e73000000000000000000000000000000000000000000000000606482015260840161077a565b505050505050565b60606000835111613bb55760405162461bcd60e51b815260206004820152601c60248201527f4e616d65577261707065723a204c6162656c20746f6f2073686f727400000000604482015260640161077a565b610100835110613c075760405162461bcd60e51b815260206004820152601b60248201527f4e616d65577261707065723a204c6162656c20746f6f206c6f6e670000000000604482015260640161077a565b82518383604051602001613c1d939291906152bd565b604051602081830303815290604052905092915050565b60008481526005602090815260409091208451613c539286019061482d565b50613c5f848383614383565b837fe4119808efe03fb44c25cc9ce9a945dfe95dc48b05cdf4a351b586630c1e6b6a848484604051613c9393929190615413565b60405180910390a250505050565b600080808080613cb18787614095565b909250905081613ccd575060009350839250829150613dc19050565b6000613cd98883613ca1565b604080516020808201869052818301899052825180830384018152606090920190925280519101209850909650945090506000856004811115613d2c57634e487b7160e01b600052602160045260246000fd5b14613d3957505050613dc1565b80613d4e575060009350839250613dc1915050565b613d598387836143ec565b90955093506000856004811115613d8057634e487b7160e01b600052602160045260246000fd5b14613d8d57505050613dc1565b600081815260016020526040908190205460a01c811614613db657600394509250613dc1915050565b506000935083925050505b9250925092565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116613eac5760405162461bcd60e51b815260206004820152602760248201527f4e616d65577261707065723a20546172676574206f776e65722063616e6e6f7460448201527f2062652030783000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b038116301415613f2b5760405162461bcd60e51b815260206004820152603c60248201527f4e616d65577261707065723a20546172676574206f776e65722063616e6e6f7460448201527f20626520746865204e616d655772617070657220636f6e747261637400000000606482015260840161077a565b60008281526001602081905260409091205460a01c81161415613fb65760405162461bcd60e51b815260206004820152602660248201527f4e616d65577261707065723a20446f6d61696e206973206e6f7420756e77726160448201527f707061626c650000000000000000000000000000000000000000000000000000606482015260840161077a565b613fbf826145c9565b6040517f5b0fc9c3000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0382811660248301527f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390604401600060405180830381600087803b15801561404257600080fd5b505af1158015614056573d6000803e3d6000fd5b50506040516001600160a01b03841681528492507fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c491506020016131f6565b600080835183106140e85760405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e64730000604482015260640161077a565b600084848151811061410a57634e487b7160e01b600052603260045260246000fd5b016020015160f81c905080156141365761412f856141298660016154e3565b83614633565b925061413b565b600092505b61414581856154e3565b6141509060016154e3565b9150509250929050565b60008060006141698585614095565b9092509050816141db576001855161418191906154fb565b84146141cf5760405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d65000000604482015260640161077a565b50600091506107b69050565b6141e5858261415a565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209250505092915050565b6001600160a01b0384163b15613b5a576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190614276908990899088908890889060040161537c565b602060405180830381600087803b15801561429057600080fd5b505af19250505080156142c0575060408051601f3d908101601f191682019092526142bd91810190615010565b60015b6142cc576139f961560b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146134ac5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e73000000000000000000000000000000000000000000000000606482015260840161077a565b6000838152600160205260409020546001600160a01b038116156143e1576143aa846145c9565b6040516000815284907fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49060200160405180910390a25b613124848484614657565b6000807f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae8314156144ee576040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b15801561449057600080fd5b505afa9250505080156144c0575060408051601f3d908101601f191682019092526144bd91810190614a3b565b60015b6144cf575060049050826145c1565b6001600160a01b03811630146144ec5760018592509250506145c1565b505b6040517f02571be30000000000000000000000000000000000000000000000000000000081526004810185905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be39060240160206040518083038186803b15801561456957600080fd5b505afa15801561457d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145a19190614a3b565b6001600160a01b0316146145ba575060029050826145c1565b5060009050805b935093915050565b60008181526001602052604081205490506145e682600080613870565b60408051838152600160208201526000916001600160a01b0384169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050565b825160009061464283856154e3565b111561464d57600080fd5b5091016020012090565b60008381526001602052604090205483906001600160a01b038116156146bf5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a206d696e74206f66206578697374696e6720746f6b656e00604482015260640161077a565b6001600160a01b03841661473b5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161077a565b6001600160a01b0384163014156147ba5760405162461bcd60e51b815260206004820152603460248201527f455243313135353a206e65774f776e65722063616e6e6f74206265207468652060448201527f4e616d655772617070657220636f6e7472616374000000000000000000000000606482015260840161077a565b6147c5828585613870565b60408051838152600160208201526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46115ed3360008685600160405180602001604052806000815250614219565b8280546148399061553e565b90600052602060002090601f01602090048101928261485b57600085556148a1565b82601f1061487457805160ff19168380011785556148a1565b828001600101855582156148a1579182015b828111156148a1578251825591602001919060010190614886565b506148ad9291506148b1565b5090565b5b808211156148ad57600081556001016148b2565b60006148d1836154bb565b6040516148de8282615579565b8092508481528585850111156148f357600080fd5b8484602083013760006020868301015250509392505050565b600082601f83011261491c578081fd5b8135602061492982615497565b6040516149368282615579565b8381528281019150858301600585901b87018401881015614955578586fd5b855b8581101561497357813584529284019290840190600101614957565b5090979650505050505050565b60008083601f840112614991578182fd5b50813567ffffffffffffffff8111156149a8578182fd5b6020830191508360208285010111156149c057600080fd5b9250929050565b600082601f8301126149d7578081fd5b612deb838335602085016148c6565b803567ffffffffffffffff811681146149fe57600080fd5b919050565b80356bffffffffffffffffffffffff811681146149fe57600080fd5b600060208284031215614a30578081fd5b8135612deb816156cb565b600060208284031215614a4c578081fd5b8151612deb816156cb565b60008060408385031215614a69578081fd5b8235614a74816156cb565b91506020830135614a84816156cb565b809150509250929050565b600080600080600060a08688031215614aa6578081fd5b8535614ab1816156cb565b94506020860135614ac1816156cb565b9350604086013567ffffffffffffffff80821115614add578283fd5b614ae989838a0161490c565b94506060880135915080821115614afe578283fd5b614b0a89838a0161490c565b93506080880135915080821115614b1f578283fd5b50614b2c888289016149c7565b9150509295509295909350565b600080600080600060808688031215614b50578283fd5b8535614b5b816156cb565b94506020860135614b6b816156cb565b935060408601359250606086013567ffffffffffffffff811115614b8d578182fd5b614b9988828901614980565b969995985093965092949392505050565b600080600080600060a08688031215614bc1578283fd5b8535614bcc816156cb565b94506020860135614bdc816156cb565b93506040860135925060608601359150608086013567ffffffffffffffff811115614c05578182fd5b614b2c888289016149c7565b60008060408385031215614c23578182fd5b8235614c2e816156cb565b91506020830135614a84816156e0565b60008060408385031215614c50578182fd5b8235614c5b816156cb565b946020939093013593505050565b60008060408385031215614c7b578182fd5b823567ffffffffffffffff80821115614c92578384fd5b818501915085601f830112614ca5578384fd5b81356020614cb282615497565b604051614cbf8282615579565b8381528281019150858301600585901b870184018b1015614cde578889fd5b8896505b84871015614d09578035614cf5816156cb565b835260019690960195918301918301614ce2565b5096505086013592505080821115614d1f578283fd5b506141508582860161490c565b600060208284031215614d3d578081fd5b8151612deb816156e0565b600060208284031215614d59578081fd5b5035919050565b600060208284031215614d71578081fd5b5051919050565b60008060408385031215614d8a578182fd5b823591506020830135614a84816156cb565b600080600060608486031215614db0578081fd5b833592506020840135614dc2816156cb565b91506040840135614dd2816156cb565b809150509250925092565b60008060008060808587031215614df2578182fd5b843593506020850135614e04816156cb565b92506040850135614e14816156cb565b9150614e22606086016149e6565b905092959194509250565b600080600060608486031215614e41578081fd5b83359250602084013591506040840135614dd2816156cb565b600080600080600060a08688031215614e71578283fd5b85359450602086013593506040860135614e8a816156cb565b92506060860135614e9a816156cb565b9150614ea8608087016149e6565b90509295509295909350565b600080600080600080600060c0888a031215614ece578485fd5b87359650602088013567ffffffffffffffff811115614eeb578586fd5b614ef78a828b01614980565b9097509550506040880135614f0b816156cb565b93506060880135614f1b816156cb565b9250614f29608089016149e6565b9150614f3760a08901614a03565b905092959891949750929550565b600080600080600060808688031215614f5c578283fd5b85359450602086013567ffffffffffffffff811115614f79578384fd5b614f8588828901614980565b9095509350506040860135614f99816156cb565b9150614ea860608701614a03565b60008060408385031215614fb9578182fd5b82359150614fc9602084016149e6565b90509250929050565b60008060408385031215614fe4578182fd5b82359150614fc960208401614a03565b600060208284031215615005578081fd5b8135612deb816156ee565b600060208284031215615021578081fd5b8151612deb816156ee565b600080600080600060808688031215615043578283fd5b853567ffffffffffffffff811115615059578384fd5b61506588828901614980565b9096509450506020860135615079816156cb565b925061508760408701614a03565b91506060860135615097816156cb565b809150509295509295909350565b60008060008060008060a087890312156150bd578384fd5b863567ffffffffffffffff8111156150d3578485fd5b6150df89828a01614980565b90975095505060208701356150f3816156cb565b935060408701359250606087013561510a816156cb565b915061511860808801614a03565b90509295509295509295565b600060208284031215615135578081fd5b815167ffffffffffffffff81111561514b578182fd5b8201601f8101841361515b578182fd5b8051615166816154bb565b6040516151738282615579565b828152866020848601011115615187578485fd5b615198836020830160208701615512565b9695505050505050565b600080600080608085870312156151b7578182fd5b843567ffffffffffffffff8111156151cd578283fd5b8501601f810187136151dd578283fd5b6151ec878235602084016148c6565b94505060208501356151fd816156cb565b925061520b60408601614a03565b9150606085013561521b816156cb565b939692955090935050565b60008060408385031215615238578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156152765781518752958201959082019060010161525a565b509495945050505050565b60008151808452615299816020860160208601615512565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b7fff000000000000000000000000000000000000000000000000000000000000008460f81b168152600083516152fa816001850160208801615512565b835190830190615311816001840160208801615512565b0160010195945050505050565b60006001600160a01b03808816835280871660208401525060a0604083015261534a60a0830186615247565b828103606084015261535c8186615247565b905082810360808401526153708185615281565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526153b460a0830184615281565b979650505050505050565b602081526000612deb6020830184615247565b6040815260006153e56040830185615247565b82810360208401526153f78185615247565b95945050505050565b602081526000612deb6020830184615281565b6060815260006154266060830186615281565b90506001600160a01b03841660208301526bffffffffffffffffffffffff83166040830152949350505050565b6bffffffffffffffffffffffff84168152606081016005841061548657634e487b7160e01b600052602160045260246000fd5b602082019390935260400152919050565b600067ffffffffffffffff8211156154b1576154b16155f5565b5060051b60200190565b600067ffffffffffffffff8211156154d5576154d56155f5565b50601f01601f191660200190565b600082198211156154f6576154f66155df565b500190565b60008282101561550d5761550d6155df565b500390565b60005b8381101561552d578181015183820152602001615515565b838111156131245750506000910152565b600181811c9082168061555257607f821691505b6020821081141561557357634e487b7160e01b600052602260045260246000fd5b50919050565b601f19601f830116810181811067ffffffffffffffff8211171561559f5761559f6155f5565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155d8576155d86155df565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561562057600481823e5160e01c5b90565b600060443d10156156315790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561567f57505050505090565b82850191508151818111156156975750505050505090565b843d87010160208285010111156156b15750505050505090565b6156c060208286010187615579565b509095945050505050565b6001600160a01b038116811461359457600080fd5b801515811461359457600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461359457600080fdfea26469706673582212206b49b8092c7392c0a2b4c70a0fd278560b01901786eae2427019b38d2f788be364736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
