ETH Price: $3,335.91 (-3.50%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NftDescriptor

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 4 : NftDescriptor.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "@openzeppelin/contracts/utils/Strings.sol";
import "./base64.sol";

import "hardhat/console.sol";

contract NftDescriptor {
    uint16 private constant NULL_VALUE = 65535;

    uint256 private constant NUMBER_OF_TRAITS = 11;
    uint256 private constant NUMBER_OF_TYPES = 3;

    uint256 private constant TYPE1 = 0;
    uint256 private constant TYPE2 = 1;
    uint256 private constant TYPE3 = 2;

    uint16 constant MAX_RANGE = 100;
    uint16 constant MAX_SPEED = 99;

    uint16 private constant PROPS_INDEX = 2;

    uint16 private constant BACKGROUND_INDEX = 0;
    uint16 private constant TYPE_INDEX = 1;
    uint16 private constant ANCHOR_INDEX = 2;
    uint16 private constant HULL_INDEX = 3;
    uint16 private constant LIGHT_INDEX = 4;
    uint16 private constant BACK_INDEX = 5;
    uint16 private constant CABIN_INDEX = 6;
    uint16 private constant DECOR_INDEX = 7;
    uint16 private constant GRILL_INDEX = 8;
    // uint16 private constant BACKGROUND_OVERLAY_INDEX = 9;
    // uint16 private constant BACKGROUND_SHADOW_INDEX = 10;
    uint16 private constant SPEED_INDEX = 9;
    uint16 private constant RANGE_INDEX = 10;

    uint16 private constant PROPS_ANCHOR = 0;
    uint16 private constant PROPS_HULL = 1;
    uint16 private constant PROPS_LIGHT = 2;
    uint16 private constant PROPS_BACK = 3;
    uint16 private constant PROPS_CABIN = 4;
    uint16 private constant PROPS_DECOR = 5;
    uint16 private constant PROPS_GRILL = 6;
    // uint16 private constant PROPS_BACKGROUND_OVERLAY = 7;
    // uint16 private constant PROPS_BACKGROUND_SHADOW = 8;

    uint8 private constant BITMASK = 255;

    string[NUMBER_OF_TRAITS] private traitNames;
    string[][NUMBER_OF_TRAITS][NUMBER_OF_TYPES] private traitValues;

    uint16[] private cutoffsBackground;
    uint16[] private cutoffsType;
    uint16[][NUMBER_OF_TRAITS][NUMBER_OF_TYPES] private cutoffs;

    constructor() {
        // prettier-ignore
        traitNames = [string("Background"),"Type","Anchor","Hull","Lights","Equipment","Cabin","Equipment","Equipment", "Speed", "Range"];
        // prettier-ignore
        traitValues[0][0] = [string("Everglades Ape Park"),"Ape Island","Ape Harbour Coast","Skyline Coast","Magic Islands","Mystic Sea","Orang Reef","Waterfall Bay","Apelaska","Twilight Bay","Monkey Port","Legendary Ocean","Pirate Coast"];
        // prettier-ignore
        traitValues[0][1] = [string("Type 1"),"Type 2","Type 3"];
        // prettier-ignore
        traitValues[0][2] = [string("Purple Moon"),"Long Gold","Big Iron","Silver Hook","Bronze Kraken","Purple Gold","Old Moon","Long Steel","Big Gold","Gem Hook","Purple Kraken"];
        // prettier-ignore
        traitValues[0][3] = [string("Rottnest"),"Trobriand Neon","Normanby Neon","Savaii Neon","Fitzroy Neon","Bruny Neon","Boracay","Maui","Solomon","Apes","Pirate","Mauritius","Fraser","Palau","Fitzroy","Savaii","Voavah","Koh Samui","Bedarra","Yasawa","Siquijor","Faroe","Haida","Misool","Ios","Formentera","Principe","Gold","Madeira","Koh Yao Noi","Thanda","Normanby","Magnetic","Bawah","Soneva Jani","Orpheus","Kunfunadhoo","Bora Bora","Raymond","Pamalican","Nihi Sumba","Navarino","Pirate Neon","Apes Neon","Boracay Neon","Chiloe Neon","Navarino Neon","Gold Neon","Principe Neon","Haggerstone Neon","Madeira Neon","Magaruque Neon","Pamalican Neon","Raymond Neon","Bora Bora Neon","Nihi Sumba Neon","Kunfunadhoo Neon","Orpheus Neon","Soneva Jani Neon","Magnetic Neon","Thanda Neon","Koh Yao Noi Neon","Formentera Neon","Ios Neon","Faroe Neon","Siquijor Neon","Pangkor Laut Neon","Yasawa Neon","Bedarra Neon","Koh Samui Neon","Voavah Neon","Palau Neon","Fraser Neon","Mauritius Neon","Islay Neon","Solomon Neon","Maui Neon","Mayreau Neon","Rottnest Neon","Bawah Neon","Velaa Neon","Misool Neon","Haida Neon","Dominica Neon","Chiloe","Magaruque","Haggerstone","Dominica","Pangkor Laut","Trobriand"];
        // prettier-ignore
        traitValues[0][4] = [string("White Stripes"),"Shiny Lights","Laser Light","Yellow Spots","Pink Spots","Blue Spots","Back Spots","Big Spots","Big Shine","Star Lights","Blue Stripes"];
        // prettier-ignore
        traitValues[0][5] = [string("Rocket Back"),"Flag Back Black","Sea Hunter Back Green","Sea Hunter Back Red","Orange Platform","Gray Platform","Dock Back","Wings Special Back","Wings Back ","Rose Back","Long Orange Back","Long Black Back","Flag Back Blue","Anthracite Platform","Red Back"];
        // prettier-ignore
        traitValues[0][6] = [string("Alien Alpha"),"Ark with Gold","Ark Gold","Ark Orange","Miami Red","Miami Orange","Explorer I","Explorer II","Explorer III","Cali Orange","Cali Ocean","Stealth","Vader","Vader Black","Vader Red","Cyber Gray","Navy","Sydney Green","Sydney Red","Sydney Orange","Gaya Red","Gaya Green","Futura","Weaver Teal","Weaver Red","Cyber Red","Shades Z","Shades X","Shades Y","Breeze Brown","Breeze Green","Breeze Orange","View Green","View Orange","View Rose","Sporty Red","Sporty Yellow","Mech 41","Mech 42","Mech 43","Monaco","Monaco Black","Macau","Sea Dog","Ember 2032","Ember 2033","Ember 2034","Cyber Blue","Ark Green","Predator RS","Predator GS"];
        // prettier-ignore
        traitValues[0][7] = [string("AH Balloon Green"),"AH Balloon Red","Apes Balloon","AH Pirate Balloon","Bananas Balloon","Pirate Balloon","Red Heli Front","White Heli Front","Gold Heli Front","Red Heli Neon","White Heli Neon","Gold Heli Neon"];
        // prettier-ignore
        traitValues[0][8] = [string("Short Black Railing"),"Long Light Railing","Long Neon Railing","Short Gray Railing","Long Gray Railing","Long Gray Railing RS","Gold Railing","Long Red Railing","Long Blue Railing"];
        // prettier-ignore
        traitValues[1][0] = [string("Everglades Ape Park"),"Ape Island","Ape Harbour Coast","Skyline Coast","Magic Islands","Mystic Sea","Orang Reef","Waterfall Bay","Apelaska","Twilight Bay","Monkey Port","Legendary Ocean","Pirate Coast"];
        // prettier-ignore
        traitValues[1][1] = [string("Type 1"),"Type 2","Type 3"];
        // prettier-ignore
        traitValues[1][2] = [string("Sea Hammer"),"Apemiral Gold","Trident","Red Skipper","Cape","Sculpture","Cyber Anchor","Wave Breaker","Red Spikes","Ocean Tech","Crescent","Gold Wing","Iron RS","Teal Rock","Steel Star"];
        // prettier-ignore
        traitValues[1][3] = [string("Ape Harbour"),"Fanjove","Gold Shark","Okinawa Neon","Raratonga Neon","Raratonga Black","Marshall","Galapagos","Crete","Moorea","Wagmi","Tonga","Hodl","Sentosa","Skye Neon","Skye","Santorini","Ilha Grande","AHvar","Jamaica","Gotland","Koh Rong","Mont Neon","Mont","Pemba","Hodl Stripes","Sommaroy","Okinawa","Matcha","Koh Rong Neon","Jamaica Neon","Ilha Grande Neon","Tonga Neon Beta","Santorini Neon","Sentosa Neon","Hodl Neon","Tonga Neon Alpha","Wagmi Neon","Moorea Neon","Crete Neon","Galapagos Neon","Marshall Neon","Gold Shark Neon","Fanjove Neon","Matcha Neon","Sommaroy Neon","AHvar Neon","Hodl Stripes Neon","Gotland Neon","Pemba Neon","Ape Harbour Neon","Gold Star","Thunder","Rockstar","Alien 2060 Green","Alien 2060 Green Neon","Alien 2060 Red Neon","Alien 2060 Red","Alien 2060 Blue Neon","Alien 2060 Blue","Alien 2060 Dmt Neon","Alien 2060 Dmt"];
        // prettier-ignore
        traitValues[1][4] = [string("Long Laser Light"),"Red Purple LED","Blue Highlights","Blue Red LED","White LED","White Shine LED","Green Red Shine LED","Full Spotlights","Orange Cross Lights","White Cross Lights","Red Highlights"];
        // prettier-ignore
        traitValues[1][5] = [string("Back Fin"),"Chrome Back","Steel Back","Steel Fin","Gold Fin","White Heli Back","Red Heli Back","Gold Heli Back "];
        // prettier-ignore
        traitValues[1][6] = [string("Filippo Green"),"Maro Gold Deluxe","Glass Tower Y","Palancar Rose","Osprey South","Scorpion Y","Sula Red","Maro Gold","Alien GT","Ocean Hawk","Minerva Gray","Filippo Blue","Maro Green","Filippo Red","Sky Black","Maro Blue","Sky Red","Glass Tower T","Glass Tower A","Filippo Orange","Sea Master","Coral","Deep Sea Blue","Deep Sea Purple","Minerva Gold LED","Minerva Blue LED","Barrier ","Palancar Orange","Palancar Green","Atlantis Gold","Atlantis Green","Atlantis Blue","Osprey North","Scorpion G","Sula Rose","Minerva Purple"];
        // prettier-ignore
        traitValues[1][7] = [string("Radar Fin"),"Fin","Sails","Golden Lightning","Orca","Manta Ray","Helipad","Helipad Gold Heli","Helipad White Heli","Helipad Red Heli","Sensor","Sensor Gold","Solar Panel Black","Solar Panel Blue"];
        // prettier-ignore
        traitValues[1][8] = new string[](0);
        // prettier-ignore
        traitValues[2][0] = [string("Everglades Ape Park"),"Ape Island","Ape Harbour Coast","Skyline Coast","Magic Islands","Mystic Sea","Orang Reef","Waterfall Bay","Apelaska","Twilight Bay","Monkey Port","Legendary Ocean","Pirate Coast"];
        // prettier-ignore
        traitValues[2][1] = [string("Type 1"),"Type 2","Type 3"];
        // prettier-ignore
        traitValues[2][2] = [string("Sea Hammer"),"Apemiral Gold","Trident","Red Skipper","Cape","Sculpture","Cyber Anchor","Wave Breaker","Red Spikes","Ocean Tech","Crescent","Gold Wing","Iron RS","Teal Rock","Steel Star"];
        // prettier-ignore
        traitValues[2][3] = [string("Gili"),"Rosario","Schnabel","Hayman","Ischia","Rosario Neon","Ischia Neon","Gili Neon","Hayman Neon","Schnabel Neon"];
        // prettier-ignore
        traitValues[2][4] = [string("Red Highlights"),"Red Purple LED II","Blue Highlights","White Cross Lights","Orange Cross Lights","Full Spotlights II","Green Red Shine LED II","White Shine LED II","White LED II","Blue Red LED II"];
        // prettier-ignore
        traitValues[2][5] = [string("Back Fin"),"Chrome Back","Steel Back","Steel Fin","Gold Fin","White Heli Back","Red Heli Back","Gold Heli Back "];
        // prettier-ignore
        traitValues[2][6] = [string("Filippo Green"),"Maro Gold Deluxe","Glass Tower Y","Palancar Rose","Osprey South","Scorpion Y","Sula Red","Maro Gold","Alien GT","Ocean Hawk","Minerva Gray","Filippo Blue","Maro Green","Filippo Red","Sky Black","Maro Blue","Sky Red","Glass Tower T","Glass Tower A","Filippo Orange","Sea Master","Coral","Deep Sea Blue","Deep Sea Purple","Minerva Gold LED","Minerva Blue LED","Barrier ","Palancar Orange","Palancar Green","Atlantis Gold","Atlantis Green","Atlantis Blue","Osprey North","Scorpion G","Sula Rose","Minerva Purple"];
        // prettier-ignore
        traitValues[2][7] = [string("Radar Fin"),"Fin","Sails","Golden Lightning","Orca","Manta Ray","Helipad","Helipad Gold Heli","Helipad White Heli","Helipad Red Heli","Sensor","Sensor Gold","Solar Panel Black","Solar Panel Blue"];
        // prettier-ignore
        traitValues[2][8] = new string[](0);

        // prettier-ignore
        cutoffsBackground = [uint16(22),47,73,96,102,127,147,168,180,205,225,240,256];
        // prettier-ignore
        cutoffsType = [uint16(123),243,256];
        // prettier-ignore
        cutoffs[0][0] = [uint16(21),40,64,81,104,129,154,184,206,222,246];
        // prettier-ignore
        cutoffs[0][1] = [uint16(3),6,8,11,13,16,19,22,25,28,31,35,38,42,45,49,52,55,58,61,64,67,70,73,75,78,80,81,84,87,89,91,94,98,101,104,107,111,114,117,120,124,127,131,134,137,140,141,143,146,149,152,155,158,162,165,167,170,173,176,178,181,184,186,189,191,194,196,199,202,205,208,211,214,216,219,221,224,226,229,232,235,238,241,243,246,249,252,254,256];
        // prettier-ignore
        cutoffs[0][2] = [uint16(10),30,74,96,121,146,166,186,206,226,236];
        // prettier-ignore
        cutoffs[0][3] = [uint16(10),28,42,56,71,86,97,117,138,158,170,182,200,215,236];
        // prettier-ignore
        cutoffs[0][4] = [uint16(3),5,6,10,16,22,28,32,38,42,50,60,66,71,75,79,86,92,98,104,112,119,126,130,135,139,146,152,158,162,166,170,175,180,185,189,193,196,199,203,209,215,223,231,235,238,240,243,249,253,256];
        // prettier-ignore
        cutoffs[0][5] = [uint16(15),30,43,52,62,72,89,104,114,131,146,156];
        // prettier-ignore
        cutoffs[0][6] = [uint16(20),50,75,97,128,158,176,206,226];
        // prettier-ignore
        cutoffs[1][0] = [uint16(20),32,46,64,79,95,113,131,145,165,185,197,214,230,246];
        // prettier-ignore
        cutoffs[1][1] = [uint16(7),12,13,17,21,26,31,36,41,46,51,56,62,67,71,76,81,86,91,96,101,106,110,115,120,125,130,137,142,146,150,154,159,163,167,171,175,179,183,189,193,197,198,202,207,211,216,220,224,229,235,236,240,244,246,247,248,250,251,253,254,256];
        // prettier-ignore
        cutoffs[1][2] = [uint16(43),61,81,101,121,141,161,176,196,216,236];
        // prettier-ignore
        cutoffs[1][3] = [uint16(34),64,96,126,151,166,186,196];
        // prettier-ignore
        cutoffs[1][4] = [uint16(5),7,16,25,32,37,46,50,58,69,73,77,87,92,101,111,119,128,135,138,147,158,166,173,178,185,190,200,209,213,222,229,237,242,251,256];
        // prettier-ignore
        cutoffs[1][5] = [uint16(10),20,40,50,62,77,92,102,117,137,152,162,179,196];
        // prettier-ignore
        cutoffs[1][6] = new uint16[](0);
        // prettier-ignore
        cutoffs[2][0] = [uint16(20),32,46,64,79,95,113,131,145,165,185,197,214,230,246];
        // prettier-ignore
        cutoffs[2][1] = [uint16(35),70,75,110,145,175,202,227,252,256];
        // prettier-ignore
        cutoffs[2][2] = [uint16(23),48,71,95,119,139,162,182,206,231];
        // prettier-ignore
        cutoffs[2][3] = [uint16(34),64,96,126,151,166,186,196];
        // prettier-ignore
        cutoffs[2][4] = [uint16(5),7,16,25,32,37,46,50,58,69,73,77,87,92,101,111,119,128,135,138,147,158,166,173,178,185,190,200,209,213,222,229,237,242,251,256];
        // prettier-ignore
        cutoffs[2][5] = [uint16(10),20,40,50,62,77,92,102,117,137,152,162,179,196];
        // prettier-ignore
        cutoffs[2][6] = new uint16[](0);
    }

    function generateInitialBoatString(uint256[NUMBER_OF_TRAITS] memory traits)
        public
        view
        returns (uint16[NUMBER_OF_TRAITS] memory)
    {
        uint16[NUMBER_OF_TRAITS] memory selection;

        // determine background
        for (uint16 i = 0; i < cutoffsBackground.length; i++) {
            if (traits[BACKGROUND_INDEX] <= cutoffsBackground[i]) {
                selection[BACKGROUND_INDEX] = i;
                break;
            }
        }

        // determine type
        for (uint16 i = 0; i < cutoffsType.length; i++) {
            if (traits[TYPE_INDEX] <= cutoffsType[i]) {
                selection[TYPE_INDEX] = i;
                break;
            }
        }

        // loop through traits, then loop through the cutoffs for the trait to find the correct value
        // loop through string values only, that's why the loop is - 2
        for (uint256 i = PROPS_INDEX; i < NUMBER_OF_TRAITS - 2; i++) {
            uint256 yachtType = selection[TYPE_INDEX];
            uint16 propIndex = uint16(i - PROPS_INDEX);
            selection[i] = NULL_VALUE;
            for (uint16 j = 0; j < cutoffs[yachtType][propIndex].length; j++) {
                if (traits[i] <= cutoffs[yachtType][propIndex][j]) {
                    selection[i] = j;
                    break;
                }
            }
        }

        selection[SPEED_INDEX] = uint16(traits[SPEED_INDEX]) % MAX_SPEED + 1;
        selection[RANGE_INDEX] = uint16(traits[RANGE_INDEX]) % MAX_RANGE + 1;

        return selection;
    }

    function applyRules(uint16[NUMBER_OF_TRAITS] memory _initialSelection)
        public
        pure
        returns (uint16[NUMBER_OF_TRAITS] memory)
    {
        uint16[NUMBER_OF_TRAITS] memory code = _initialSelection;

        // #2 pecker hull, turbine hull -> no front, no anchor, no large cabin
        if (
            (code[TYPE_INDEX] == TYPE2 &&
                (code[HULL_INDEX] == 45 ||
                    code[HULL_INDEX] == 26 ||
                    code[HULL_INDEX] == 0 ||
                    code[HULL_INDEX] == 50)) ||
            (code[TYPE_INDEX] == TYPE3 &&
                (code[HULL_INDEX] == 2 || code[HULL_INDEX] == 9))
        ) {
            code[DECOR_INDEX] = NULL_VALUE;
            code[ANCHOR_INDEX] = NULL_VALUE;

            // no large cabin
            if (code[CABIN_INDEX] == 0) {
                code[CABIN_INDEX] += 1;
            }
            if (code[CABIN_INDEX] == 11) {
                code[CABIN_INDEX] += 1;
            }
            if (code[CABIN_INDEX] == 13) {
                code[CABIN_INDEX] -= 1;
            }
            if (code[CABIN_INDEX] == 14) {
                code[CABIN_INDEX] += 1;
            }
            if (code[CABIN_INDEX] == 16) {
                code[CABIN_INDEX] += 2;
            }
            if (code[CABIN_INDEX] == 19) {
                code[CABIN_INDEX] += 1;
            }
            if (code[CABIN_INDEX] == 23) {
                code[CABIN_INDEX] += 1;
            }
        }

        // #3 pecker hull -> no specific lights
        if (
            code[TYPE_INDEX] == TYPE3 &&
            (code[HULL_INDEX] == 2 || code[HULL_INDEX] == 9) &&
            (code[LIGHT_INDEX] == 0 || code[LIGHT_INDEX] == 2)
        ) {
            code[LIGHT_INDEX] = NULL_VALUE;
        }

        // #4 no front, no anchor for larger cabins
        if (
            code[CABIN_INDEX] == 0 ||
            code[CABIN_INDEX] == 11 ||
            code[CABIN_INDEX] == 13 ||
            code[CABIN_INDEX] == 14 ||
            code[CABIN_INDEX] == 16 ||
            code[CABIN_INDEX] == 19
        ) {
            code[DECOR_INDEX] = NULL_VALUE;
            code[ANCHOR_INDEX] = NULL_VALUE;
        }

        // #5 no front for glassy cabins
        if (code[CABIN_INDEX] == 5 || code[CABIN_INDEX] == 33) {
            code[DECOR_INDEX] = NULL_VALUE;
        }

        // #6 turbine hull, tron hull -> don't do specific cabins
        if (
            (code[TYPE_INDEX] == TYPE2 &&
                (code[HULL_INDEX] == 45 ||
                    code[HULL_INDEX] == 26 ||
                    code[HULL_INDEX] == 0 ||
                    code[HULL_INDEX] == 50 ||
                    (code[HULL_INDEX] >= 54 && code[HULL_INDEX] <= 61))) ||
            (code[TYPE_INDEX] == TYPE3 &&
                (code[HULL_INDEX] == 2 || code[HULL_INDEX] == 9))
        ) {
            if (code[CABIN_INDEX] == 10) {
                code[CABIN_INDEX] -= 1;
            }
            if (code[CABIN_INDEX] == 35) {
                code[CABIN_INDEX] -= 1;
            }
            if (code[CABIN_INDEX] == 24) {
                code[CABIN_INDEX] -= 1;
            }
            if (code[CABIN_INDEX] == 25) {
                code[CABIN_INDEX] += 2;
            }
            if (code[CABIN_INDEX] == 26) {
                code[CABIN_INDEX] += 1;
            }
            if (code[CABIN_INDEX] == 20) {
                code[CABIN_INDEX] += 1;
            }
        }

        // #7 new hulls -> don't do specific cabins
        if (
            code[TYPE_INDEX] == TYPE2 &&
            (code[HULL_INDEX] == 51 ||
                code[HULL_INDEX] == 52 ||
                code[HULL_INDEX] == 53)
        ) {
            if (code[CABIN_INDEX] == 2) {
                code[CABIN_INDEX] -= 1;
            }
            if (code[CABIN_INDEX] == 17) {
                code[CABIN_INDEX] -= 1;
            }
            if (code[CABIN_INDEX] == 18) {
                code[CABIN_INDEX] += 1;
            }
            if (code[CABIN_INDEX] == 22) {
                code[CABIN_INDEX] -= 1;
            }
            if (code[CABIN_INDEX] == 23) {
                code[CABIN_INDEX] += 1;
            }
        }

        // #8 redish hull, strange hull, tron hull + glassy cabin -> other cabin
        if (
            code[TYPE_INDEX] == TYPE2 &&
            (code[HULL_INDEX] == 19 ||
                code[HULL_INDEX] == 30 ||
                (code[HULL_INDEX] >= 54 && code[HULL_INDEX] <= 61) ||
                code[HULL_INDEX] == 16 ||
                code[HULL_INDEX] == 33) &&
            (code[CABIN_INDEX] == 14 || code[CABIN_INDEX] == 16)
        ) {
            code[CABIN_INDEX] -= 1;
        }

        // #9 redish hull -> no front
        if (
            code[TYPE_INDEX] == TYPE2 &&
            (code[HULL_INDEX] == 19 || code[HULL_INDEX] == 30)
        ) {
            code[DECOR_INDEX] = NULL_VALUE;
        }

        // #10 arch cabin, stairs back -> other back
        if (
            code[TYPE_INDEX] == TYPE1 &&
            code[CABIN_INDEX] == 0 &&
            code[BACK_INDEX] == 10
        ) {
            code[BACK_INDEX] -= 1;
        }

        if (
            code[TYPE_INDEX] == TYPE1 &&
            code[CABIN_INDEX] == 0 &&
            code[BACK_INDEX] == 11
        ) {
            code[BACK_INDEX] += 1;
        }

        // #11 special hull, glassy cabin -> other cabin
        if (
            code[TYPE_INDEX] == TYPE2 &&
            (code[HULL_INDEX] == 16 || code[HULL_INDEX] == 33) &&
            (code[CABIN_INDEX] == 5 || code[CABIN_INDEX] == 33)
        ) {
            code[CABIN_INDEX] -= 1;
        }

        // #12 tron hull -> no sailing front
        if (
            code[TYPE_INDEX] == TYPE2 &&
            code[HULL_INDEX] >= 54 &&
            code[HULL_INDEX] <= 61 &&
            (code[DECOR_INDEX] == 4 ||
                code[DECOR_INDEX] == 10 ||
                code[DECOR_INDEX] == 11)
        ) {
            code[DECOR_INDEX] = NULL_VALUE;
        }

        // #13 special hull -> no front
        if (
            code[TYPE_INDEX] == TYPE2 &&
            (code[HULL_INDEX] == 16 || code[HULL_INDEX] == 33)
        ) {
            code[DECOR_INDEX] = NULL_VALUE;
        }
        return code;
    }

    function decodeTokenId(uint256 _seed, uint256 _id)
        public
        pure
        returns (uint256[NUMBER_OF_TRAITS] memory)
    {
        // prettier-ignore
        uint8[NUMBER_OF_TRAITS] memory shifts = [ 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80 ];
        uint256[NUMBER_OF_TRAITS] memory traits;

        uint256 dna = uint256(keccak256(abi.encode(_seed, _id)));

        for (uint256 i = 0; i < NUMBER_OF_TRAITS; i++) {
            traits[i] = uint8((dna >> shifts[i]) & BITMASK);
        }

        return traits;
    }

    function getAttributeBytes(
        uint16 _key,
        uint16 _value,
        uint16 _yachtType
    ) private view returns (bytes memory) {
        // prettier-ignore
        // solhint-disable-next-line quotes
        return ( abi.encodePacked( '{"trait_type": "', traitNames[_key], '", "value": "', traitValues[_yachtType][_key][_value], '"}' ) );
    }

    function getNumericAttributeBytes(string memory _key, uint256 _value)
        private
        view
        returns (bytes memory)
    {
        // prettier-ignore
        // solhint-disable-next-line quotes
        return ( abi.encodePacked( '{"trait_type": "', _key, '", "value": ', Strings.toString(_value), "}" ) );
    }

    function getAttributes(uint16[NUMBER_OF_TRAITS] memory code)
        private
        view
        returns (string memory)
    {
        // solhint-disable-next-line quotes
        bytes memory attributes = '"attributes": [';

        for (uint16 i = 0; i < code.length; i++) {
            // loop through attributes

            // console.log("%s BEFORE: %s", i, string(attributes));

            // ignore type and background shadows
            if (i == TYPE_INDEX) {
                continue;
            }
            if (code[i] == NULL_VALUE) {
                continue;
            }

            if (i == BACKGROUND_INDEX) {
                // if background do not add ',' to the array
                attributes = abi.encodePacked(
                    attributes,
                    getAttributeBytes(i, code[i], code[TYPE_INDEX])
                );
                continue;
            }

            if (i == SPEED_INDEX) {
                attributes = abi.encodePacked(attributes, ",", getNumericAttributeBytes(traitNames[SPEED_INDEX], code[SPEED_INDEX]));
                continue;
            }

            if (i == RANGE_INDEX) {
                attributes = abi.encodePacked(attributes, ",", getNumericAttributeBytes(traitNames[RANGE_INDEX], code[RANGE_INDEX]));
                continue;
            }

            attributes = abi.encodePacked(
                attributes,
                ",",
                getAttributeBytes(i, code[i], code[TYPE_INDEX])
            );
            // console.log("%s AFTER: %s", i, string(attributes));
        }

        attributes = abi.encodePacked(attributes, "]");
        return string(attributes);
    }

    function tokenURI(
        uint256 _tokenId,
        string memory _name,
        uint256 _seed,
        string memory _baseUrl
    ) public view returns (string memory) {
        // replace name with default if yacht has not been named yet
        if (
            keccak256(abi.encodePacked(_name)) ==
            keccak256(abi.encodePacked(""))
        ) {
            _name = string(
                abi.encodePacked("Superyacht ", Strings.toString(_tokenId))
            );
        }

        // decode boat code
        uint256[NUMBER_OF_TRAITS] memory traitsRndValues = decodeTokenId(
            _seed,
            _tokenId
        );
        uint16[NUMBER_OF_TRAITS] memory code = generateInitialBoatString(
            traitsRndValues
        );
        code = applyRules(code);

        // prettier-ignore
        // solhint-disable-next-line quotes
        bytes memory content = abi.encodePacked( '{"name": "', _name, '"', ', "description": "An Ape Harbour Superyacht"' );

        // prettier-ignore
        // solhint-disable-next-line quotes
        content = abi.encodePacked( content, ", ", getAttributes(code), ", ", '"image": "', _baseUrl, Strings.toString(_tokenId), '.png"', "}" );

        string memory result = string(
            abi.encodePacked(
                "data:application/json;base64,",
                Base64.encode(content)
            )
        );

        return result;
    }
}

File 2 of 4 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 3 of 4 : base64.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/// @title Base64
/// @author Brecht Devos - <[email protected]>
/// @notice Provides a function for encoding some bytes in base64
library Base64 {
    string internal constant TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return '';
        
        // load the table into memory
        string memory table = TABLE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)
            
            // prepare the lookup table
            let tablePtr := add(table, 1)
            
            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))
            
            // result ptr, jump over length
            let resultPtr := add(result, 32)
            
            // run over the input, 3 bytes at a time
            for {} lt(dataPtr, endPtr) {}
            {
               dataPtr := add(dataPtr, 3)
               
               // read 3 bytes
               let input := mload(dataPtr)
               
               // write 4 characters
               mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F)))))
               resultPtr := add(resultPtr, 1)
               mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F)))))
               resultPtr := add(resultPtr, 1)
               mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr( 6, input), 0x3F)))))
               resultPtr := add(resultPtr, 1)
               mstore(resultPtr, shl(248, mload(add(tablePtr, and(        input,  0x3F)))))
               resultPtr := add(resultPtr, 1)
            }
            
            // padding with '='
            switch mod(mload(data), 3)
            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }
        }
        
        return result;
    }
}

File 4 of 4 : console.sol
// SPDX-License-Identifier: MIT
pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint16[11]","name":"_initialSelection","type":"uint16[11]"}],"name":"applyRules","outputs":[{"internalType":"uint16[11]","name":"","type":"uint16[11]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"decodeTokenId","outputs":[{"internalType":"uint256[11]","name":"","type":"uint256[11]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[11]","name":"traits","type":"uint256[11]"}],"name":"generateInitialBoatString","outputs":[{"internalType":"uint16[11]","name":"","type":"uint16[11]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"string","name":"_baseUrl","type":"string"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518061016001604052806040518060400160405280600a81526020017f4261636b67726f756e640000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f547970650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f416e63686f72000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f48756c6c0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4c6967687473000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f45717569706d656e74000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f436162696e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f45717569706d656e74000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f45717569706d656e74000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f537065656400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f52616e6765000000000000000000000000000000000000000000000000000000815250815250600090600b620002b79291906200a4b4565b50604051806101a001604052806040518060400160405280601381526020017f45766572676c6164657320417065205061726b0000000000000000000000000081525081526020016040518060400160405280600a81526020017f4170652049736c616e640000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f41706520486172626f757220436f61737400000000000000000000000000000081525081526020016040518060400160405280600d81526020017f536b796c696e6520436f6173740000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4d616769632049736c616e64730000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d7973746963205365610000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f72616e6720526565660000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f576174657266616c6c204261790000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4170656c61736b6100000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5477696c6967687420426179000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4d6f6e6b657920506f727400000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4c6567656e64617279204f6365616e000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f50697261746520436f6173740000000000000000000000000000000000000000815250815250600b600060038110620005fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016000600b81106200063b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600d6200064c9291906200a50e565b5060405180606001604052806040518060400160405280600681526020017f547970652031000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f547970652032000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5479706520330000000000000000000000000000000000000000000000000000815250815250600b60006003811062000743577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016001600b811062000781577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906003620007929291906200a575565b506040518061016001604052806040518060400160405280600b81526020017f507572706c65204d6f6f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4c6f6e6720476f6c64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4269672049726f6e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f53696c76657220486f6f6b00000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f42726f6e7a65204b72616b656e0000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f507572706c6520476f6c6400000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4f6c64204d6f6f6e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4c6f6e6720537465656c0000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f42696720476f6c6400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f47656d20486f6f6b00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f507572706c65204b72616b656e00000000000000000000000000000000000000815250815250600b60006003811062000a62577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016002600b811062000aa0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600b62000ab19291906200a5dc565b5060405180610b4001604052806040518060400160405280600881526020017f526f74746e65737400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f54726f627269616e64204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4e6f726d616e6279204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f536176616969204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4669747a726f79204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4272756e79204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f426f72616361790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d6175690000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f536f6c6f6d6f6e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f417065730000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f506972617465000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d6175726974697573000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f467261736572000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f50616c617500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4669747a726f790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f536176616969000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f566f61766168000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4b6f682053616d7569000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f426564617272610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f596173617761000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f53697175696a6f7200000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4661726f6500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f486169646100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d69736f6f6c000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f496f73000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f466f726d656e746572610000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f5072696e6369706500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f476f6c640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6164656972610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4b6f682059616f204e6f6900000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5468616e6461000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4e6f726d616e627900000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4d61676e6574696300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426177616800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f536f6e657661204a616e6900000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4f7270686575730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4b756e66756e6164686f6f00000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f426f726120426f7261000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f5261796d6f6e640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f50616d616c6963616e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4e6968692053756d62610000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4e61766172696e6f00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f506972617465204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f41706573204e656f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f426f7261636179204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4368696c6f65204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4e61766172696e6f204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c64204e656f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5072696e63697065204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f48616767657273746f6e65204e656f6e0000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4d616465697261204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4d6167617275717565204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f50616d616c6963616e204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5261796d6f6e64204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f426f726120426f7261204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4e6968692053756d6261204e656f6e000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4b756e66756e6164686f6f204e656f6e0000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4f727068657573204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f536f6e657661204a616e69204e656f6e0000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4d61676e65746963204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f5468616e6461204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4b6f682059616f204e6f69204e656f6e0000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f466f726d656e74657261204e656f6e000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f496f73204e656f6e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4661726f65204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f53697175696a6f72204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f50616e676b6f72204c617574204e656f6e00000000000000000000000000000081525081526020016040518060400160405280600b81526020017f596173617761204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f42656461727261204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4b6f682053616d7569204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f566f61766168204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f50616c6175204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f467261736572204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4d6175726974697573204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f49736c6179204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f536f6c6f6d6f6e204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d617569204e656f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4d617972656175204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f526f74746e657374204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4261776168204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f56656c6161204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4d69736f6f6c204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4861696461204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f446f6d696e696361204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4368696c6f65000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d6167617275717565000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f48616767657273746f6e6500000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f446f6d696e69636100000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f50616e676b6f72204c617574000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f54726f627269616e640000000000000000000000000000000000000000000000815250815250600b60006003811062001fb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016003600b811062001ff4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190605a620020059291906200a643565b506040518061016001604052806040518060400160405280600d81526020017f576869746520537472697065730000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5368696e79204c6967687473000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4c61736572204c6967687400000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f59656c6c6f772053706f7473000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f50696e6b2053706f74730000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f426c75652053706f74730000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4261636b2053706f74730000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4269672053706f7473000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f426967205368696e65000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f53746172204c696768747300000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f426c756520537472697065730000000000000000000000000000000000000000815250815250600b600060038110620022d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016004600b811062002313577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600b620023249291906200a5dc565b50604051806101e001604052806040518060400160405280600b81526020017f526f636b6574204261636b00000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f466c6167204261636b20426c61636b000000000000000000000000000000000081525081526020016040518060400160405280601581526020017f5365612048756e746572204261636b20477265656e000000000000000000000081525081526020016040518060400160405280601381526020017f5365612048756e746572204261636b205265640000000000000000000000000081525081526020016040518060400160405280600f81526020017f4f72616e676520506c6174666f726d000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4772617920506c6174666f726d0000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f446f636b204261636b000000000000000000000000000000000000000000000081525081526020016040518060400160405280601281526020017f57696e6773205370656369616c204261636b000000000000000000000000000081525081526020016040518060400160405280600b81526020017f57696e6773204261636b2000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f526f7365204261636b000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4c6f6e67204f72616e6765204261636b0000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4c6f6e6720426c61636b204261636b000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f466c6167204261636b20426c756500000000000000000000000000000000000081525081526020016040518060400160405280601381526020017f416e746872616369746520506c6174666f726d0000000000000000000000000081525081526020016040518060400160405280600881526020017f526564204261636b000000000000000000000000000000000000000000000000815250815250600b600060038110620026e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016005600b81106200271e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600f6200272f9291906200a6aa565b506040518061066001604052806040518060400160405280600b81526020017f416c69656e20416c70686100000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f41726b207769746820476f6c640000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f41726b20476f6c6400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f41726b204f72616e67650000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d69616d6920526564000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4d69616d69204f72616e6765000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4578706c6f72657220490000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4578706c6f72657220494900000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4578706c6f72657220494949000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f43616c69204f72616e676500000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f43616c69204f6365616e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f537465616c74680000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f566164657200000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f566164657220426c61636b00000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f566164657220526564000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f437962657220477261790000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6176790000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5379646e657920477265656e000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f5379646e6579205265640000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5379646e6579204f72616e67650000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f476179612052656400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4761796120477265656e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f467574757261000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f576561766572205465616c00000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f576561766572205265640000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f437962657220526564000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f536861646573205a00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f536861646573205800000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f536861646573205900000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f427265657a652042726f776e000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f427265657a6520477265656e000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f427265657a65204f72616e67650000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f5669657720477265656e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f56696577204f72616e676500000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f5669657720526f7365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f53706f727479205265640000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f53706f7274792059656c6c6f770000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6563682034310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6563682034320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6563682034330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d6f6e61636f000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4d6f6e61636f20426c61636b000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4d6163617500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f53656120446f670000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f456d62657220323033320000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f456d62657220323033330000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f456d62657220323033340000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f437962657220426c75650000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f41726b20477265656e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f5072656461746f7220525300000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f5072656461746f72204753000000000000000000000000000000000000000000815250815250600b60006003811062003337577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016006600b811062003375577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906033620033869291906200a711565b506040518061018001604052806040518060400160405280601081526020017f41482042616c6c6f6f6e20477265656e0000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f41482042616c6c6f6f6e2052656400000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f417065732042616c6c6f6f6e000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f4148205069726174652042616c6c6f6f6e00000000000000000000000000000081525081526020016040518060400160405280600f81526020017f42616e616e61732042616c6c6f6f6e000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f5069726174652042616c6c6f6f6e00000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f5265642048656c692046726f6e7400000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f57686974652048656c692046726f6e740000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f476f6c642048656c692046726f6e74000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5265642048656c69204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f57686974652048656c69204e656f6e000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f476f6c642048656c69204e656f6e000000000000000000000000000000000000815250815250600b60006003811062003691577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016007600b8110620036cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600c620036e09291906200a778565b506040518061012001604052806040518060400160405280601381526020017f53686f727420426c61636b205261696c696e670000000000000000000000000081525081526020016040518060400160405280601281526020017f4c6f6e67204c69676874205261696c696e67000000000000000000000000000081525081526020016040518060400160405280601181526020017f4c6f6e67204e656f6e205261696c696e6700000000000000000000000000000081525081526020016040518060400160405280601281526020017f53686f72742047726179205261696c696e67000000000000000000000000000081525081526020016040518060400160405280601181526020017f4c6f6e672047726179205261696c696e6700000000000000000000000000000081525081526020016040518060400160405280601481526020017f4c6f6e672047726179205261696c696e6720525300000000000000000000000081525081526020016040518060400160405280600c81526020017f476f6c64205261696c696e67000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4c6f6e6720526564205261696c696e670000000000000000000000000000000081525081526020016040518060400160405280601181526020017f4c6f6e6720426c7565205261696c696e67000000000000000000000000000000815250815250600b6000600381106200393a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016008600b811062003978577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906009620039899291906200a7df565b50604051806101a001604052806040518060400160405280601381526020017f45766572676c6164657320417065205061726b0000000000000000000000000081525081526020016040518060400160405280600a81526020017f4170652049736c616e640000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f41706520486172626f757220436f61737400000000000000000000000000000081525081526020016040518060400160405280600d81526020017f536b796c696e6520436f6173740000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4d616769632049736c616e64730000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d7973746963205365610000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f72616e6720526565660000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f576174657266616c6c204261790000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4170656c61736b6100000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5477696c6967687420426179000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4d6f6e6b657920506f727400000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4c6567656e64617279204f6365616e000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f50697261746520436f6173740000000000000000000000000000000000000000815250815250600b60016003811062003ccf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016000600b811062003d0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600d62003d1e9291906200a50e565b5060405180606001604052806040518060400160405280600681526020017f547970652031000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f547970652032000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5479706520330000000000000000000000000000000000000000000000000000815250815250600b60016003811062003e15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016001600b811062003e53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600362003e649291906200a575565b50604051806101e001604052806040518060400160405280600a81526020017f5365612048616d6d65720000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4170656d6972616c20476f6c640000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f54726964656e740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f52656420536b697070657200000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f436170650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f5363756c7074757265000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f437962657220416e63686f72000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5761766520427265616b6572000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f526564205370696b65730000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f6365616e20546563680000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4372657363656e7400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c642057696e67000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f49726f6e2052530000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f5465616c20526f636b000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f537465656c205374617200000000000000000000000000000000000000000000815250815250600b60016003811062004220577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016002600b81106200425e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600f6200426f9291906200a6aa565b50604051806107c001604052806040518060400160405280600b81526020017f41706520486172626f757200000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f46616e6a6f76650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f476f6c6420536861726b0000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4f6b696e617761204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f52617261746f6e6761204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f52617261746f6e676120426c61636b000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4d61727368616c6c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f47616c617061676f73000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f437265746500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d6f6f726561000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f5761676d6900000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f546f6e676100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f486f646c0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f53656e746f73610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f536b7965204e656f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f536b79650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f53616e746f72696e69000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f496c6861204772616e646500000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f414876617200000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4a616d616963610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f476f746c616e640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4b6f6820526f6e6700000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d6f6e74204e656f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d6f6e740000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f50656d626100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f486f646c2053747269706573000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f536f6d6d61726f7900000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4f6b696e6177610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d6174636861000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4b6f6820526f6e67204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4a616d61696361204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f496c6861204772616e6465204e656f6e0000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f546f6e6761204e656f6e2042657461000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f53616e746f72696e69204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f53656e746f7361204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f486f646c204e656f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f546f6e6761204e656f6e20416c7068610000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f5761676d69204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4d6f6f726561204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4372657465204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f47616c617061676f73204e656f6e00000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4d61727368616c6c204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f476f6c6420536861726b204e656f6e000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f46616e6a6f7665204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4d6174636861204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f536f6d6d61726f79204e656f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4148766172204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f486f646c2053747269706573204e656f6e00000000000000000000000000000081525081526020016040518060400160405280600c81526020017f476f746c616e64204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f50656d6261204e656f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f41706520486172626f7572204e656f6e0000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c642053746172000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f5468756e6465720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f526f636b7374617200000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f416c69656e203230363020477265656e0000000000000000000000000000000081525081526020016040518060400160405280601581526020017f416c69656e203230363020477265656e204e656f6e000000000000000000000081525081526020016040518060400160405280601381526020017f416c69656e203230363020526564204e656f6e0000000000000000000000000081525081526020016040518060400160405280600e81526020017f416c69656e20323036302052656400000000000000000000000000000000000081525081526020016040518060400160405280601481526020017f416c69656e203230363020426c7565204e656f6e00000000000000000000000081525081526020016040518060400160405280600f81526020017f416c69656e203230363020426c7565000000000000000000000000000000000081525081526020016040518060400160405280601381526020017f416c69656e203230363020446d74204e656f6e0000000000000000000000000081525081526020016040518060400160405280600e81526020017f416c69656e203230363020446d74000000000000000000000000000000000000815250815250600b60016003811062005100577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016003600b81106200513e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190603e6200514f9291906200a846565b506040518061016001604052806040518060400160405280601081526020017f4c6f6e67204c61736572204c696768740000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f52656420507572706c65204c454400000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f426c756520486967686c6967687473000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f426c756520526564204c4544000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f5768697465204c4544000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f5768697465205368696e65204c4544000000000000000000000000000000000081525081526020016040518060400160405280601381526020017f477265656e20526564205368696e65204c45440000000000000000000000000081525081526020016040518060400160405280600f81526020017f46756c6c2053706f746c6967687473000000000000000000000000000000000081525081526020016040518060400160405280601381526020017f4f72616e67652043726f7373204c69676874730000000000000000000000000081525081526020016040518060400160405280601281526020017f57686974652043726f7373204c6967687473000000000000000000000000000081525081526020016040518060400160405280600e81526020017f52656420486967686c6967687473000000000000000000000000000000000000815250815250600b6001600381106200541f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016004600b81106200545d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600b6200546e9291906200a5dc565b506040518061010001604052806040518060400160405280600881526020017f4261636b2046696e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4368726f6d65204261636b00000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f537465656c204261636b0000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f537465656c2046696e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f476f6c642046696e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f57686974652048656c69204261636b000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5265642048656c69204261636b0000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f476f6c642048656c69204261636b200000000000000000000000000000000000815250815250600b6001600381106200568d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016005600b8110620056cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906008620056dc9291906200a8ad565b506040518061048001604052806040518060400160405280600d81526020017f46696c6970706f20477265656e0000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d61726f20476f6c642044656c7578650000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f476c61737320546f77657220590000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f50616c616e63617220526f73650000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4f737072657920536f757468000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f53636f7270696f6e20590000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f53756c612052656400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d61726f20476f6c64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f416c69656e20475400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f6365616e204861776b0000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4d696e657276612047726179000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f46696c6970706f20426c7565000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d61726f20477265656e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f46696c6970706f2052656400000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f536b7920426c61636b000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d61726f20426c7565000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f536b79205265640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f476c61737320546f77657220540000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f476c61737320546f77657220410000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f46696c6970706f204f72616e676500000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f536561204d61737465720000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f436f72616c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f446565702053656120426c75650000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f446565702053656120507572706c65000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d696e6572766120476f6c64204c45440000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d696e6572766120426c7565204c45440000000000000000000000000000000081525081526020016040518060400160405280600881526020017f426172726965722000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f50616c616e636172204f72616e6765000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f50616c616e63617220477265656e00000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f41746c616e74697320476f6c640000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f41746c616e74697320477265656e00000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f41746c616e74697320426c75650000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4f7370726579204e6f727468000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f53636f7270696f6e20470000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f53756c6120526f7365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4d696e6572766120507572706c65000000000000000000000000000000000000815250815250600b60016003811062005f6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016006600b811062005fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190602462005fbe9291906200a914565b50604051806101c001604052806040518060400160405280600981526020017f52616461722046696e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f46696e000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f5361696c7300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f476f6c64656e204c696768746e696e670000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4f7263610000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d616e746120526179000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f48656c697061640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f48656c6970616420476f6c642048656c6900000000000000000000000000000081525081526020016040518060400160405280601281526020017f48656c697061642057686974652048656c69000000000000000000000000000081525081526020016040518060400160405280601081526020017f48656c69706164205265642048656c690000000000000000000000000000000081525081526020016040518060400160405280600681526020017f53656e736f72000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f53656e736f7220476f6c6400000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f536f6c61722050616e656c20426c61636b00000000000000000000000000000081525081526020016040518060400160405280601081526020017f536f6c61722050616e656c20426c756500000000000000000000000000000000815250815250600b6001600381106200633f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016007600b81106200637d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600e6200638e9291906200a97b565b50600067ffffffffffffffff811115620063d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156200640657816020015b6060815260200190600190039081620063f05790505b50600b60016003811062006443577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016008600b811062006481577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b019080519060200190620064979291906200a9e2565b50604051806101a001604052806040518060400160405280601381526020017f45766572676c6164657320417065205061726b0000000000000000000000000081525081526020016040518060400160405280600a81526020017f4170652049736c616e640000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f41706520486172626f757220436f61737400000000000000000000000000000081525081526020016040518060400160405280600d81526020017f536b796c696e6520436f6173740000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4d616769632049736c616e64730000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d7973746963205365610000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f72616e6720526565660000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f576174657266616c6c204261790000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4170656c61736b6100000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5477696c6967687420426179000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4d6f6e6b657920506f727400000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4c6567656e64617279204f6365616e000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f50697261746520436f6173740000000000000000000000000000000000000000815250815250600b600260038110620067dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016000600b81106200681b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600d6200682c9291906200a50e565b5060405180606001604052806040518060400160405280600681526020017f547970652031000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f547970652032000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5479706520330000000000000000000000000000000000000000000000000000815250815250600b60026003811062006923577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016001600b811062006961577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906003620069729291906200a575565b50604051806101e001604052806040518060400160405280600a81526020017f5365612048616d6d65720000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4170656d6972616c20476f6c640000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f54726964656e740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f52656420536b697070657200000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f436170650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f5363756c7074757265000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f437962657220416e63686f72000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5761766520427265616b6572000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f526564205370696b65730000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f6365616e20546563680000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4372657363656e7400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c642057696e67000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f49726f6e2052530000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f5465616c20526f636b000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f537465656c205374617200000000000000000000000000000000000000000000815250815250600b60026003811062006d2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016002600b811062006d6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600f62006d7d9291906200a6aa565b506040518061014001604052806040518060400160405280600481526020017f47696c690000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f526f736172696f0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f5363686e6162656c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4861796d616e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f497363686961000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f526f736172696f204e656f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f497363686961204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f47696c69204e656f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4861796d616e204e656f6e00000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5363686e6162656c204e656f6e00000000000000000000000000000000000000815250815250600b60026003811062007012577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016003600b811062007050577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600a620070619291906200aa49565b506040518061014001604052806040518060400160405280600e81526020017f52656420486967686c696768747300000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f52656420507572706c65204c454420494900000000000000000000000000000081525081526020016040518060400160405280600f81526020017f426c756520486967686c6967687473000000000000000000000000000000000081525081526020016040518060400160405280601281526020017f57686974652043726f7373204c6967687473000000000000000000000000000081525081526020016040518060400160405280601381526020017f4f72616e67652043726f7373204c69676874730000000000000000000000000081525081526020016040518060400160405280601281526020017f46756c6c2053706f746c6967687473204949000000000000000000000000000081525081526020016040518060400160405280601681526020017f477265656e20526564205368696e65204c45442049490000000000000000000081525081526020016040518060400160405280601281526020017f5768697465205368696e65204c4544204949000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5768697465204c4544204949000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f426c756520526564204c45442049490000000000000000000000000000000000815250815250600b600260038110620072f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016004600b811062007334577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600a620073459291906200aa49565b506040518061010001604052806040518060400160405280600881526020017f4261636b2046696e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4368726f6d65204261636b00000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f537465656c204261636b0000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f537465656c2046696e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f476f6c642046696e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f57686974652048656c69204261636b000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f5265642048656c69204261636b0000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f476f6c642048656c69204261636b200000000000000000000000000000000000815250815250600b60026003811062007564577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016005600b8110620075a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906008620075b39291906200a8ad565b506040518061048001604052806040518060400160405280600d81526020017f46696c6970706f20477265656e0000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d61726f20476f6c642044656c7578650000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f476c61737320546f77657220590000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f50616c616e63617220526f73650000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4f737072657920536f757468000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f53636f7270696f6e20590000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f53756c612052656400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d61726f20476f6c64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f416c69656e20475400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f6365616e204861776b0000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4d696e657276612047726179000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f46696c6970706f20426c7565000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d61726f20477265656e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f46696c6970706f2052656400000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f536b7920426c61636b000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d61726f20426c7565000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f536b79205265640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f476c61737320546f77657220540000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f476c61737320546f77657220410000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f46696c6970706f204f72616e676500000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f536561204d61737465720000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f436f72616c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f446565702053656120426c75650000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f446565702053656120507572706c65000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d696e6572766120476f6c64204c45440000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d696e6572766120426c7565204c45440000000000000000000000000000000081525081526020016040518060400160405280600881526020017f426172726965722000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f50616c616e636172204f72616e6765000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f50616c616e63617220477265656e00000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f41746c616e74697320476f6c640000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f41746c616e74697320477265656e00000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f41746c616e74697320426c75650000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4f7370726579204e6f727468000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f53636f7270696f6e20470000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f53756c6120526f7365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4d696e6572766120507572706c65000000000000000000000000000000000000815250815250600b60026003811062007e46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016006600b811062007e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190602462007e959291906200a914565b50604051806101c001604052806040518060400160405280600981526020017f52616461722046696e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f46696e000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f5361696c7300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f476f6c64656e204c696768746e696e670000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4f7263610000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d616e746120526179000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f48656c697061640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f48656c6970616420476f6c642048656c6900000000000000000000000000000081525081526020016040518060400160405280601281526020017f48656c697061642057686974652048656c69000000000000000000000000000081525081526020016040518060400160405280601081526020017f48656c69706164205265642048656c690000000000000000000000000000000081525081526020016040518060400160405280600681526020017f53656e736f72000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f53656e736f7220476f6c6400000000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f536f6c61722050616e656c20426c61636b00000000000000000000000000000081525081526020016040518060400160405280601081526020017f536f6c61722050616e656c20426c756500000000000000000000000000000000815250815250600b60026003811062008216577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016007600b811062008254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600e620082659291906200a97b565b50600067ffffffffffffffff811115620082a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015620082dd57816020015b6060815260200190600190039081620082c75790505b50600b6002600381106200831a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016008600b811062008358577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190805190602001906200836e9291906200a9e2565b50604051806101a00160405280601661ffff1661ffff168152602001602f61ffff168152602001604961ffff168152602001606061ffff168152602001606661ffff168152602001607f61ffff168152602001609361ffff16815260200160a861ffff16815260200160b461ffff16815260200160cd61ffff16815260200160e161ffff16815260200160f061ffff16815260200161010061ffff16815250602c90600d6200841f9291906200aab0565b506040518060600160405280607b61ffff1661ffff16815260200160f361ffff16815260200161010061ffff16815250602d906003620084619291906200ab61565b50604051806101600160405280601561ffff1661ffff168152602001602861ffff168152602001604061ffff168152602001605161ffff168152602001606861ffff168152602001608161ffff168152602001609a61ffff16815260200160b861ffff16815260200160ce61ffff16815260200160de61ffff16815260200160f661ffff16815250602e60006003811062008525577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016000600b811062008563577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600b620085749291906200ac12565b5060405180610b400160405280600361ffff1661ffff168152602001600661ffff168152602001600861ffff168152602001600b61ffff168152602001600d61ffff168152602001601061ffff168152602001601361ffff168152602001601661ffff168152602001601961ffff168152602001601c61ffff168152602001601f61ffff168152602001602361ffff168152602001602661ffff168152602001602a61ffff168152602001602d61ffff168152602001603161ffff168152602001603461ffff168152602001603761ffff168152602001603a61ffff168152602001603d61ffff168152602001604061ffff168152602001604361ffff168152602001604661ffff168152602001604961ffff168152602001604b61ffff168152602001604e61ffff168152602001605061ffff168152602001605161ffff168152602001605461ffff168152602001605761ffff168152602001605961ffff168152602001605b61ffff168152602001605e61ffff168152602001606261ffff168152602001606561ffff168152602001606861ffff168152602001606b61ffff168152602001606f61ffff168152602001607261ffff168152602001607561ffff168152602001607861ffff168152602001607c61ffff168152602001607f61ffff168152602001608361ffff168152602001608661ffff168152602001608961ffff168152602001608c61ffff168152602001608d61ffff168152602001608f61ffff168152602001609261ffff168152602001609561ffff168152602001609861ffff168152602001609b61ffff168152602001609e61ffff16815260200160a261ffff16815260200160a561ffff16815260200160a761ffff16815260200160aa61ffff16815260200160ad61ffff16815260200160b061ffff16815260200160b261ffff16815260200160b561ffff16815260200160b861ffff16815260200160ba61ffff16815260200160bd61ffff16815260200160bf61ffff16815260200160c261ffff16815260200160c461ffff16815260200160c761ffff16815260200160ca61ffff16815260200160cd61ffff16815260200160d061ffff16815260200160d361ffff16815260200160d661ffff16815260200160d861ffff16815260200160db61ffff16815260200160dd61ffff16815260200160e061ffff16815260200160e261ffff16815260200160e561ffff16815260200160e861ffff16815260200160eb61ffff16815260200160ee61ffff16815260200160f161ffff16815260200160f361ffff16815260200160f661ffff16815260200160f961ffff16815260200160fc61ffff16815260200160fe61ffff16815260200161010061ffff16815250602e6000600381106200899e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016001600b8110620089dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190605a620089ed9291906200acc3565b50604051806101600160405280600a61ffff1661ffff168152602001601e61ffff168152602001604a61ffff168152602001606061ffff168152602001607961ffff168152602001609261ffff16815260200160a661ffff16815260200160ba61ffff16815260200160ce61ffff16815260200160e261ffff16815260200160ec61ffff16815250602e60006003811062008ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016002600b811062008aef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600b62008b009291906200ac12565b50604051806101e00160405280600a61ffff1661ffff168152602001601c61ffff168152602001602a61ffff168152602001603861ffff168152602001604761ffff168152602001605661ffff168152602001606161ffff168152602001607561ffff168152602001608a61ffff168152602001609e61ffff16815260200160aa61ffff16815260200160b661ffff16815260200160c861ffff16815260200160d761ffff16815260200160ec61ffff16815250602e60006003811062008bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016003600b811062008c2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600f62008c3f9291906200ad74565b50604051806106600160405280600361ffff1661ffff168152602001600561ffff168152602001600661ffff168152602001600a61ffff168152602001601061ffff168152602001601661ffff168152602001601c61ffff168152602001602061ffff168152602001602661ffff168152602001602a61ffff168152602001603261ffff168152602001603c61ffff168152602001604261ffff168152602001604761ffff168152602001604b61ffff168152602001604f61ffff168152602001605661ffff168152602001605c61ffff168152602001606261ffff168152602001606861ffff168152602001607061ffff168152602001607761ffff168152602001607e61ffff168152602001608261ffff168152602001608761ffff168152602001608b61ffff168152602001609261ffff168152602001609861ffff168152602001609e61ffff16815260200160a261ffff16815260200160a661ffff16815260200160aa61ffff16815260200160af61ffff16815260200160b461ffff16815260200160b961ffff16815260200160bd61ffff16815260200160c161ffff16815260200160c461ffff16815260200160c761ffff16815260200160cb61ffff16815260200160d161ffff16815260200160d761ffff16815260200160df61ffff16815260200160e761ffff16815260200160eb61ffff16815260200160ee61ffff16815260200160f061ffff16815260200160f361ffff16815260200160f961ffff16815260200160fd61ffff16815260200161010061ffff16815250602e60006003811062008ebc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016004600b811062008efa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190603362008f0b9291906200ae25565b50604051806101800160405280600f61ffff1661ffff168152602001601e61ffff168152602001602b61ffff168152602001603461ffff168152602001603e61ffff168152602001604861ffff168152602001605961ffff168152602001606861ffff168152602001607261ffff168152602001608361ffff168152602001609261ffff168152602001609c61ffff16815250602e60006003811062008fda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016005600b811062009018577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600c620090299291906200aed6565b50604051806101200160405280601461ffff1661ffff168152602001603261ffff168152602001604b61ffff168152602001606161ffff168152602001608061ffff168152602001609e61ffff16815260200160b061ffff16815260200160ce61ffff16815260200160e261ffff16815250602e600060038110620090d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016006600b811062009115577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906009620091269291906200af87565b50604051806101e00160405280601461ffff1661ffff168152602001602061ffff168152602001602e61ffff168152602001604061ffff168152602001604f61ffff168152602001605f61ffff168152602001607161ffff168152602001608361ffff168152602001609161ffff16815260200160a561ffff16815260200160b961ffff16815260200160c561ffff16815260200160d661ffff16815260200160e661ffff16815260200160f661ffff16815250602e60016003811062009216577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016000600b811062009254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600f620092659291906200ad74565b50604051806107c00160405280600761ffff1661ffff168152602001600c61ffff168152602001600d61ffff168152602001601161ffff168152602001601561ffff168152602001601a61ffff168152602001601f61ffff168152602001602461ffff168152602001602961ffff168152602001602e61ffff168152602001603361ffff168152602001603861ffff168152602001603e61ffff168152602001604361ffff168152602001604761ffff168152602001604c61ffff168152602001605161ffff168152602001605661ffff168152602001605b61ffff168152602001606061ffff168152602001606561ffff168152602001606a61ffff168152602001606e61ffff168152602001607361ffff168152602001607861ffff168152602001607d61ffff168152602001608261ffff168152602001608961ffff168152602001608e61ffff168152602001609261ffff168152602001609661ffff168152602001609a61ffff168152602001609f61ffff16815260200160a361ffff16815260200160a761ffff16815260200160ab61ffff16815260200160af61ffff16815260200160b361ffff16815260200160b761ffff16815260200160bd61ffff16815260200160c161ffff16815260200160c561ffff16815260200160c661ffff16815260200160ca61ffff16815260200160cf61ffff16815260200160d361ffff16815260200160d861ffff16815260200160dc61ffff16815260200160e061ffff16815260200160e561ffff16815260200160eb61ffff16815260200160ec61ffff16815260200160f061ffff16815260200160f461ffff16815260200160f661ffff16815260200160f761ffff16815260200160f861ffff16815260200160fa61ffff16815260200160fb61ffff16815260200160fd61ffff16815260200160fe61ffff16815260200161010061ffff16815250602e6001600381106200955b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016001600b811062009599577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190603e620095aa9291906200b038565b50604051806101600160405280602b61ffff1661ffff168152602001603d61ffff168152602001605161ffff168152602001606561ffff168152602001607961ffff168152602001608d61ffff16815260200160a161ffff16815260200160b061ffff16815260200160c461ffff16815260200160d861ffff16815260200160ec61ffff16815250602e6001600381106200966e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016002600b8110620096ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600b620096bd9291906200ac12565b50604051806101000160405280602261ffff1661ffff168152602001604061ffff168152602001606061ffff168152602001607e61ffff168152602001609761ffff16815260200160a661ffff16815260200160ba61ffff16815260200160c461ffff16815250602e60016003811062009760577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016003600b81106200979e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906008620097af9291906200b0e9565b50604051806104800160405280600561ffff1661ffff168152602001600761ffff168152602001601061ffff168152602001601961ffff168152602001602061ffff168152602001602561ffff168152602001602e61ffff168152602001603261ffff168152602001603a61ffff168152602001604561ffff168152602001604961ffff168152602001604d61ffff168152602001605761ffff168152602001605c61ffff168152602001606561ffff168152602001606f61ffff168152602001607761ffff168152602001608061ffff168152602001608761ffff168152602001608a61ffff168152602001609361ffff168152602001609e61ffff16815260200160a661ffff16815260200160ad61ffff16815260200160b261ffff16815260200160b961ffff16815260200160be61ffff16815260200160c861ffff16815260200160d161ffff16815260200160d561ffff16815260200160de61ffff16815260200160e561ffff16815260200160ed61ffff16815260200160f261ffff16815260200160fb61ffff16815260200161010061ffff16815250602e60016003811062009987577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016004600b8110620099c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906024620099d69291906200b19a565b50604051806101c00160405280600a61ffff1661ffff168152602001601461ffff168152602001602861ffff168152602001603261ffff168152602001603e61ffff168152602001604d61ffff168152602001605c61ffff168152602001606661ffff168152602001607561ffff168152602001608961ffff168152602001609861ffff16815260200160a261ffff16815260200160b361ffff16815260200160c461ffff16815250602e60016003811062009abb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016005600b811062009af9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600e62009b0a9291906200b24b565b50600067ffffffffffffffff81111562009b4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801562009b7c5781602001602082028036833780820191505090505b50602e60016003811062009bb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016006600b811062009bf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01908051906020019062009c0d9291906200b2fc565b50604051806101e00160405280601461ffff1661ffff168152602001602061ffff168152602001602e61ffff168152602001604061ffff168152602001604f61ffff168152602001605f61ffff168152602001607161ffff168152602001608361ffff168152602001609161ffff16815260200160a561ffff16815260200160b961ffff16815260200160c561ffff16815260200160d661ffff16815260200160e661ffff16815260200160f661ffff16815250602e60026003811062009cfd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016000600b811062009d3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600f62009d4c9291906200ad74565b50604051806101400160405280602361ffff1661ffff168152602001604661ffff168152602001604b61ffff168152602001606e61ffff168152602001609161ffff16815260200160af61ffff16815260200160ca61ffff16815260200160e361ffff16815260200160fc61ffff16815260200161010061ffff16815250602e60026003811062009e06577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016001600b811062009e44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600a62009e559291906200b3ad565b50604051806101400160405280601761ffff1661ffff168152602001603061ffff168152602001604761ffff168152602001605f61ffff168152602001607761ffff168152602001608b61ffff16815260200160a261ffff16815260200160b661ffff16815260200160ce61ffff16815260200160e761ffff16815250602e60026003811062009f0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016002600b811062009f4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600a62009f5d9291906200b3ad565b50604051806101000160405280602261ffff1661ffff168152602001604061ffff168152602001606061ffff168152602001607e61ffff168152602001609761ffff16815260200160a661ffff16815260200160ba61ffff16815260200160c461ffff16815250602e6002600381106200a000577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016003600b81106200a03e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b019060086200a04f9291906200b0e9565b50604051806104800160405280600561ffff1661ffff168152602001600761ffff168152602001601061ffff168152602001601961ffff168152602001602061ffff168152602001602561ffff168152602001602e61ffff168152602001603261ffff168152602001603a61ffff168152602001604561ffff168152602001604961ffff168152602001604d61ffff168152602001605761ffff168152602001605c61ffff168152602001606561ffff168152602001606f61ffff168152602001607761ffff168152602001608061ffff168152602001608761ffff168152602001608a61ffff168152602001609361ffff168152602001609e61ffff16815260200160a661ffff16815260200160ad61ffff16815260200160b261ffff16815260200160b961ffff16815260200160be61ffff16815260200160c861ffff16815260200160d161ffff16815260200160d561ffff16815260200160de61ffff16815260200160e561ffff16815260200160ed61ffff16815260200160f261ffff16815260200160fb61ffff16815260200161010061ffff16815250602e6002600381106200a227577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016004600b81106200a265577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b019060246200a2769291906200b19a565b50604051806101c00160405280600a61ffff1661ffff168152602001601461ffff168152602001602861ffff168152602001603261ffff168152602001603e61ffff168152602001604d61ffff168152602001605c61ffff168152602001606661ffff168152602001607561ffff168152602001608961ffff168152602001609861ffff16815260200160a261ffff16815260200160b361ffff16815260200160c461ffff16815250602e6002600381106200a35b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016005600b81106200a399577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190600e6200a3aa9291906200b24b565b50600067ffffffffffffffff8111156200a3ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156200a41c5781602001602082028036833780820191505090505b50602e6002600381106200a459577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02016006600b81106200a497577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0190805190602001906200a4ad9291906200b2fc565b506200b5e1565b82600b81019282156200a4fb579160200282015b828111156200a4fa5782518290805190602001906200a4e99291906200b45e565b50916020019190600101906200a4c8565b5b5090506200a50a91906200b4ef565b5090565b8280548282559060005260206000209081019282156200a562579160200282015b828111156200a5615782518290805190602001906200a5509291906200b45e565b50916020019190600101906200a52f565b5b5090506200a57191906200b4ef565b5090565b8280548282559060005260206000209081019282156200a5c9579160200282015b828111156200a5c85782518290805190602001906200a5b79291906200b45e565b50916020019190600101906200a596565b5b5090506200a5d891906200b4ef565b5090565b8280548282559060005260206000209081019282156200a630579160200282015b828111156200a62f5782518290805190602001906200a61e9291906200b45e565b50916020019190600101906200a5fd565b5b5090506200a63f91906200b4ef565b5090565b8280548282559060005260206000209081019282156200a697579160200282015b828111156200a6965782518290805190602001906200a6859291906200b45e565b50916020019190600101906200a664565b5b5090506200a6a691906200b4ef565b5090565b8280548282559060005260206000209081019282156200a6fe579160200282015b828111156200a6fd5782518290805190602001906200a6ec9291906200b45e565b50916020019190600101906200a6cb565b5b5090506200a70d91906200b4ef565b5090565b8280548282559060005260206000209081019282156200a765579160200282015b828111156200a7645782518290805190602001906200a7539291906200b45e565b50916020019190600101906200a732565b5b5090506200a77491906200b4ef565b5090565b8280548282559060005260206000209081019282156200a7cc579160200282015b828111156200a7cb5782518290805190602001906200a7ba9291906200b45e565b50916020019190600101906200a799565b5b5090506200a7db91906200b4ef565b5090565b8280548282559060005260206000209081019282156200a833579160200282015b828111156200a8325782518290805190602001906200a8219291906200b45e565b50916020019190600101906200a800565b5b5090506200a84291906200b4ef565b5090565b8280548282559060005260206000209081019282156200a89a579160200282015b828111156200a8995782518290805190602001906200a8889291906200b45e565b50916020019190600101906200a867565b5b5090506200a8a991906200b4ef565b5090565b8280548282559060005260206000209081019282156200a901579160200282015b828111156200a9005782518290805190602001906200a8ef9291906200b45e565b50916020019190600101906200a8ce565b5b5090506200a91091906200b4ef565b5090565b8280548282559060005260206000209081019282156200a968579160200282015b828111156200a9675782518290805190602001906200a9569291906200b45e565b50916020019190600101906200a935565b5b5090506200a97791906200b4ef565b5090565b8280548282559060005260206000209081019282156200a9cf579160200282015b828111156200a9ce5782518290805190602001906200a9bd9291906200b45e565b50916020019190600101906200a99c565b5b5090506200a9de91906200b4ef565b5090565b8280548282559060005260206000209081019282156200aa36579160200282015b828111156200aa355782518290805190602001906200aa249291906200b45e565b50916020019190600101906200aa03565b5b5090506200aa4591906200b4ef565b5090565b8280548282559060005260206000209081019282156200aa9d579160200282015b828111156200aa9c5782518290805190602001906200aa8b9291906200b45e565b50916020019190600101906200aa6a565b5b5090506200aaac91906200b4ef565b5090565b82805482825590600052602060002090600f016010900481019282156200ab4e5791602002820160005b838211156200ab1c57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200aada565b80156200ab4c5782816101000a81549061ffff02191690556002016020816001010492830192600103026200ab1c565b505b5090506200ab5d91906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200abff5791602002820160005b838211156200abcd57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200ab8b565b80156200abfd5782816101000a81549061ffff02191690556002016020816001010492830192600103026200abcd565b505b5090506200ac0e91906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200acb05791602002820160005b838211156200ac7e57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200ac3c565b80156200acae5782816101000a81549061ffff02191690556002016020816001010492830192600103026200ac7e565b505b5090506200acbf91906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200ad615791602002820160005b838211156200ad2f57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200aced565b80156200ad5f5782816101000a81549061ffff02191690556002016020816001010492830192600103026200ad2f565b505b5090506200ad7091906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200ae125791602002820160005b838211156200ade057835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200ad9e565b80156200ae105782816101000a81549061ffff02191690556002016020816001010492830192600103026200ade0565b505b5090506200ae2191906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200aec35791602002820160005b838211156200ae9157835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200ae4f565b80156200aec15782816101000a81549061ffff02191690556002016020816001010492830192600103026200ae91565b505b5090506200aed291906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200af745791602002820160005b838211156200af4257835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200af00565b80156200af725782816101000a81549061ffff02191690556002016020816001010492830192600103026200af42565b505b5090506200af8391906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200b0255791602002820160005b838211156200aff357835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200afb1565b80156200b0235782816101000a81549061ffff02191690556002016020816001010492830192600103026200aff3565b505b5090506200b03491906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200b0d65791602002820160005b838211156200b0a457835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200b062565b80156200b0d45782816101000a81549061ffff02191690556002016020816001010492830192600103026200b0a4565b505b5090506200b0e591906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200b1875791602002820160005b838211156200b15557835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200b113565b80156200b1855782816101000a81549061ffff02191690556002016020816001010492830192600103026200b155565b505b5090506200b19691906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200b2385791602002820160005b838211156200b20657835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200b1c4565b80156200b2365782816101000a81549061ffff02191690556002016020816001010492830192600103026200b206565b505b5090506200b24791906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200b2e95791602002820160005b838211156200b2b757835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200b275565b80156200b2e75782816101000a81549061ffff02191690556002016020816001010492830192600103026200b2b7565b505b5090506200b2f891906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200b39a5791602002820160005b838211156200b36857835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200b326565b80156200b3985782816101000a81549061ffff02191690556002016020816001010492830192600103026200b368565b505b5090506200b3a991906200b517565b5090565b82805482825590600052602060002090600f016010900481019282156200b44b5791602002820160005b838211156200b41957835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200b3d7565b80156200b4495782816101000a81549061ffff02191690556002016020816001010492830192600103026200b419565b505b5090506200b45a91906200b517565b5090565b8280546200b46c906200b57c565b90600052602060002090601f0160209004810192826200b49057600085556200b4dc565b82601f106200b4ab57805160ff19168380011785556200b4dc565b828001600101855582156200b4dc579182015b828111156200b4db5782518255916020019190600101906200b4be565b5b5090506200b4eb91906200b517565b5090565b5b808211156200b51357600081816200b50991906200b536565b506001016200b4f0565b5090565b5b808211156200b5325760008160009055506001016200b518565b5090565b5080546200b544906200b57c565b6000825580601f106200b55857506200b579565b601f0160209004906000526020600020908101906200b57891906200b517565b5b50565b600060028204905060018216806200b59557607f821691505b602082108114156200b5ac576200b5ab6200b5b2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d13806200b5f16000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063342f01a71461005157806387024e5514610081578063a374af40146100b1578063c4662447146100e1575b600080fd5b61006b60048036038101906100669190613d80565b610111565b6040516100789190614449565b60405180910390f35b61009b60048036038101906100969190613ced565b610287565b6040516100a89190614465565b60405180910390f35b6100cb60048036038101906100c69190613c99565b6103c3565b6040516100d8919061442d565b60405180910390f35b6100fb60048036038101906100f69190613cc3565b612a1b565b604051610108919061442d565b60405180910390f35b610119613aad565b6000604051806101600160405280600060ff168152602001600860ff168152602001601060ff168152602001601860ff168152602001602060ff168152602001602860ff168152602001603060ff168152602001603860ff168152602001604060ff168152602001604860ff168152602001605060ff16815250905061019d613aad565b600085856040516020016101b2929190614487565b6040516020818303038152906040528051906020012060001c905060005b600b81101561027a5760ff80168482600b8110610216577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160ff1683901c1660ff168382600b811061025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525050808061027290614867565b9150506101d0565b5081935050505092915050565b606060405160200161029890614418565b60405160208183030381529060405280519060200120846040516020016102bf91906142fb565b604051602081830303815290604052805190602001201415610306576102e4856130e0565b6040516020016102f491906143f6565b60405160208183030381529060405293505b60006103128487610111565b9050600061031f82612a1b565b905061032a816103c3565b905060008660405160200161033f919061439c565b60405160208183030381529060405290508061035a8361328d565b866103648b6130e0565b6040516020016103779493929190614286565b604051602081830303815290604052905060006103938261379f565b6040516020016103a391906143d4565b604051602081830303815290604052905080945050505050949350505050565b6103cb613ad0565b6000829050600181600161ffff16600b8110610410577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561055f5750602d81600361ffff16600b8110610461577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806104bc5750601a81600361ffff16600b81106104b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b8061050d5750600081600361ffff16600b8110610502577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b8061055e5750603281600361ffff16600b8110610553577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b806106535750600281600161ffff16600b81106105a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156106525750600281600361ffff16600b81106105f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806106515750600981600361ffff16600b8110610646577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b5b15610bdf5761ffff81600761ffff16600b8110610699577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505061ffff81600261ffff16600b81106106ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050600081600661ffff16600b8110610740577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156107b257600181600661ffff16600b811061078f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516107a091906145fe565b91509061ffff16908161ffff16815250505b600b81600661ffff16600b81106107f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561086457600181600661ffff16600b8110610841577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161085291906145fe565b91509061ffff16908161ffff16815250505b600d81600661ffff16600b81106108a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561091657600181600661ffff16600b81106108f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516109049190614717565b91509061ffff16908161ffff16815250505b600e81600661ffff16600b8110610956577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156109c857600181600661ffff16600b81106109a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516109b691906145fe565b91509061ffff16908161ffff16815250505b601081600661ffff16600b8110610a08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415610a7a57600281600661ffff16600b8110610a57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151610a6891906145fe565b91509061ffff16908161ffff16815250505b601381600661ffff16600b8110610aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415610b2c57600181600661ffff16600b8110610b09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151610b1a91906145fe565b91509061ffff16908161ffff16815250505b601781600661ffff16600b8110610b6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415610bde57600181600661ffff16600b8110610bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151610bcc91906145fe565b91509061ffff16908161ffff16815250505b5b600281600161ffff16600b8110610c1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148015610ccc5750600281600361ffff16600b8110610c70577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480610ccb5750600981600361ffff16600b8110610cc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b8015610d6f5750600081600461ffff16600b8110610d13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480610d6e5750600281600461ffff16600b8110610d63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b15610dc95761ffff81600461ffff16600b8110610db5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600081600661ffff16600b8110610e09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480610e645750600b81600661ffff16600b8110610e59577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610eb55750600d81600661ffff16600b8110610eaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610f065750600e81600661ffff16600b8110610efb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610f575750601081600661ffff16600b8110610f4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610fa85750601381600661ffff16600b8110610f9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b156110565761ffff81600761ffff16600b8110610fee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505061ffff81600261ffff16600b8110611042577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600581600661ffff16600b8110611096577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806110f15750602181600661ffff16600b81106110e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b1561114b5761ffff81600761ffff16600b8110611137577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600181600161ffff16600b811061118b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561137f5750602d81600361ffff16600b81106111dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806112375750601a81600361ffff16600b811061122c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806112885750600081600361ffff16600b811061127d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806112d95750603281600361ffff16600b81106112ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b8061137e5750603681600361ffff16600b811061131f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161015801561137d5750603d81600361ffff16600b8110611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1611155b5b5b806114735750600281600161ffff16600b81106113c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156114725750600281600361ffff16600b8110611416577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806114715750600981600361ffff16600b8110611466577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b5b156118a557600a81600661ffff16600b81106114b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561152a57600181600661ffff16600b8110611507577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516115189190614717565b91509061ffff16908161ffff16815250505b602381600661ffff16600b811061156a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156115dc57600181600661ffff16600b81106115b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516115ca9190614717565b91509061ffff16908161ffff16815250505b601881600661ffff16600b811061161c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561168e57600181600661ffff16600b811061166b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161167c9190614717565b91509061ffff16908161ffff16815250505b601981600661ffff16600b81106116ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561174057600281600661ffff16600b811061171d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161172e91906145fe565b91509061ffff16908161ffff16815250505b601a81600661ffff16600b8110611780577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156117f257600181600661ffff16600b81106117cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516117e091906145fe565b91509061ffff16908161ffff16815250505b601481600661ffff16600b8110611832577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156118a457600181600661ffff16600b8110611881577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161189291906145fe565b91509061ffff16908161ffff16815250505b5b600181600161ffff16600b81106118e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156119e35750603381600361ffff16600b8110611936577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806119915750603481600361ffff16600b8110611986577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806119e25750603581600361ffff16600b81106119d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b15611d6357600281600661ffff16600b8110611a28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611a9a57600181600661ffff16600b8110611a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611a889190614717565b91509061ffff16908161ffff16815250505b601181600661ffff16600b8110611ada577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611b4c57600181600661ffff16600b8110611b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611b3a9190614717565b91509061ffff16908161ffff16815250505b601281600661ffff16600b8110611b8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611bfe57600181600661ffff16600b8110611bdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611bec91906145fe565b91509061ffff16908161ffff16815250505b601681600661ffff16600b8110611c3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611cb057600181600661ffff16600b8110611c8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611c9e9190614717565b91509061ffff16908161ffff16815250505b601781600661ffff16600b8110611cf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611d6257600181600661ffff16600b8110611d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611d5091906145fe565b91509061ffff16908161ffff16815250505b5b600181600161ffff16600b8110611da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148015611f975750601381600361ffff16600b8110611df4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480611e4f5750601e81600361ffff16600b8110611e44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80611ef45750603681600361ffff16600b8110611e95577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1610158015611ef35750603d81600361ffff16600b8110611ee7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1611155b5b80611f455750601081600361ffff16600b8110611f3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80611f965750602181600361ffff16600b8110611f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b801561203a5750600e81600661ffff16600b8110611fde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806120395750601081600661ffff16600b811061202e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b156120a257600181600661ffff16600b811061207f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516120909190614717565b91509061ffff16908161ffff16815250505b600181600161ffff16600b81106120e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561218f5750601381600361ffff16600b8110612133577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148061218e5750601e81600361ffff16600b8110612183577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b156121e95761ffff81600761ffff16600b81106121d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600081600161ffff16600b8110612229577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156122855750600081600661ffff16600b811061227a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80156122d75750600a81600561ffff16600b81106122cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b1561233f57600181600561ffff16600b811061231c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161232d9190614717565b91509061ffff16908161ffff16815250505b600081600161ffff16600b811061237f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156123db5750600081600661ffff16600b81106123d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b801561242d5750600b81600561ffff16600b8110612422577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b1561249557600181600561ffff16600b8110612472577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161248391906145fe565b91509061ffff16908161ffff16815250505b600181600161ffff16600b81106124d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156125825750601081600361ffff16600b8110612526577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806125815750602181600361ffff16600b8110612576577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b80156126255750600581600661ffff16600b81106125c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806126245750602181600661ffff16600b8110612619577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b1561268d57600181600661ffff16600b811061266a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161267b9190614717565b91509061ffff16908161ffff16815250505b600181600161ffff16600b81106126cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561272a5750603681600361ffff16600b811061271e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1610155b801561277d5750603d81600361ffff16600b8110612771577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1611155b80156128715750600481600761ffff16600b81106127c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148061281f5750600a81600761ffff16600b8110612814577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806128705750600b81600761ffff16600b8110612865577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b156128cb5761ffff81600761ffff16600b81106128b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600181600161ffff16600b811061290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156129b85750601081600361ffff16600b811061295c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806129b75750602181600361ffff16600b81106129ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b15612a125761ffff81600761ffff16600b81106129fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b80915050919050565b612a23613ad0565b612a2b613ad0565b60005b602c805490508161ffff161015612b5757602c8161ffff1681548110612a7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1684600061ffff16600b8110612ae3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111612b44578082600061ffff16600b8110612b2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050612b57565b8080612b4f9061483c565b915050612a2e565b5060005b602d805490508161ffff161015612c8457602d8161ffff1681548110612baa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1684600161ffff16600b8110612c10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111612c71578082600161ffff16600b8110612c59577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050612c84565b8080612c7c9061483c565b915050612b5b565b506000600261ffff1690505b6002600b612c9e919061474b565b811015612f7e57600082600161ffff16600b8110612ce5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1690506000600261ffff1683612d03919061474b565b905061ffff8484600b8110612d41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505060005b602e8360038110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02018261ffff16600b8110612dd1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01805490508161ffff161015612f6857602e8360038110612e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02018261ffff16600b8110612e5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018161ffff1681548110612e98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff168785600b8110612ef9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111612f5557808585600b8110612f3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050612f68565b8080612f609061483c565b915050612d57565b5050508080612f7690614867565b915050612c90565b506001606384600961ffff16600b8110612fc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151612fd091906148b0565b612fda91906145fe565b81600961ffff16600b8110613018577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250506001606484600a61ffff16600b811061306d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161307c91906148b0565b61308691906145fe565b81600a61ffff16600b81106130c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505080915050919050565b60606000821415613128576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613288565b600082905060005b6000821461315a57808061314390614867565b915050600a82613153919061468c565b9150613130565b60008167ffffffffffffffff81111561319c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131ce5781602001600182028036833780820191505090505b5090505b60008514613281576001826131e7919061474b565b9150600a856131f691906148e1565b60306132029190614636565b60f81b81838151811061323e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561327a919061468c565b94506131d2565b8093505050505b919050565b606060006040518060400160405280600f81526020017f2261747472696275746573223a205b0000000000000000000000000000000000815250905060005b600b8161ffff16101561377357600161ffff168161ffff1614156132ef57613760565b61ffff8016848261ffff16600b8110613331577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561334557613760565b600061ffff168161ffff16141561340c57816133e582868461ffff16600b8110613398577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600161ffff16600b81106133db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161394a565b6040516020016133f6929190614211565b6040516020818303038152906040529150613760565b600961ffff168161ffff16141561355d57816135366000600961ffff16600b8110613460577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01805461346c906147d9565b80601f0160208091040260200160405190810160405280929190818152602001828054613498906147d9565b80156134e55780601f106134ba576101008083540402835291602001916134e5565b820191906000526020600020905b8154815290600101906020018083116134c857829003601f168201915b505050505086600961ffff16600b8110613528577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16613a79565b604051602001613547929190614235565b6040516020818303038152906040529150613760565b600a61ffff168161ffff1614156136ae57816136876000600a61ffff16600b81106135b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0180546135bd906147d9565b80601f01602080910402602001604051908101604052809291908181526020018280546135e9906147d9565b80156136365780601f1061360b57610100808354040283529160200191613636565b820191906000526020600020905b81548152906001019060200180831161361957829003601f168201915b505050505086600a61ffff16600b8110613679577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16613a79565b604051602001613698929190614235565b6040516020818303038152906040529150613760565b8161373d82868461ffff16600b81106136f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600161ffff16600b8110613733577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161394a565b60405160200161374e929190614235565b60405160208183030381529060405291505b808061376b9061483c565b9150506132cc565b50806040516020016137859190614264565b604051602081830303815290604052905080915050919050565b60606000825114156137c257604051806020016040528060008152509050613945565b6000604051806060016040528060408152602001614c9e60409139905060006003600285516137f19190614636565b6137fb919061468c565b600461380791906146bd565b905060006020826138189190614636565b67ffffffffffffffff811115613857577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156138895781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015613904576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b82526001820191505061389d565b60038951066001811461391e576002811461392e57613939565b613d3d60f01b6002830352613939565b603d60f81b60018303525b50505050508093505050505b919050565b606060008461ffff16600b811061398a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01600b8361ffff16600381106139c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02018561ffff16600b8110613a09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018461ffff1681548110613a46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001604051602001613a61929190614357565b60405160208183030381529060405290509392505050565b606082613a85836130e0565b604051602001613a96929190614312565b604051602081830303815290604052905092915050565b604051806101600160405280600b90602082028036833780820191505090505090565b604051806101600160405280600b90602082028036833780820191505090505090565b6000613b06613b01846144d5565b6144b0565b90508082856020860282011115613b1c57600080fd5b60005b85811015613b4c5781613b328882613c6f565b845260208401935060208301925050600181019050613b1f565b5050509392505050565b6000613b69613b64846144fb565b6144b0565b90508082856020860282011115613b7f57600080fd5b60005b85811015613baf5781613b958882613c84565b845260208401935060208301925050600181019050613b82565b5050509392505050565b6000613bcc613bc784614521565b6144b0565b905082815260208101848484011115613be457600080fd5b613bef848285614797565b509392505050565b600082601f830112613c0857600080fd5b600b613c15848285613af3565b91505092915050565b600082601f830112613c2f57600080fd5b600b613c3c848285613b56565b91505092915050565b600082601f830112613c5657600080fd5b8135613c66848260208601613bb9565b91505092915050565b600081359050613c7e81614c6f565b92915050565b600081359050613c9381614c86565b92915050565b60006101608284031215613cac57600080fd5b6000613cba84828501613bf7565b91505092915050565b60006101608284031215613cd657600080fd5b6000613ce484828501613c1e565b91505092915050565b60008060008060808587031215613d0357600080fd5b6000613d1187828801613c84565b945050602085013567ffffffffffffffff811115613d2e57600080fd5b613d3a87828801613c45565b9350506040613d4b87828801613c84565b925050606085013567ffffffffffffffff811115613d6857600080fd5b613d7487828801613c45565b91505092959194509250565b60008060408385031215613d9357600080fd5b6000613da185828601613c84565b9250506020613db285828601613c84565b9150509250929050565b6000613dc883836141e4565b60208301905092915050565b6000613de083836141f3565b60208301905092915050565b613df58161457b565b613dff81846145c1565b9250613e0a82614552565b8060005b83811015613e3b578151613e228782613dbc565b9650613e2d836145a7565b925050600181019050613e0e565b505050505050565b613e4c81614586565b613e5681846145cc565b9250613e618261455c565b8060005b83811015613e92578151613e798782613dd4565b9650613e84836145b4565b925050600181019050613e65565b505050505050565b6000613ea582614591565b613eaf81856145d7565b9350613ebf8185602086016147a6565b80840191505092915050565b6000613ed68261459c565b613ee081856145e2565b9350613ef08185602086016147a6565b613ef9816149ce565b840191505092915050565b6000613f0f8261459c565b613f1981856145f3565b9350613f298185602086016147a6565b80840191505092915050565b60008154613f42816147d9565b613f4c81866145f3565b94506001821660008114613f675760018114613f7857613fab565b60ff19831686528186019350613fab565b613f8185614566565b60005b83811015613fa357815481890152600182019150602081019050613f84565b838801955050505b50505092915050565b6000613fc16010836145f3565b9150613fcc826149df565b601082019050919050565b6000613fe46001836145f3565b9150613fef82614a08565b600182019050919050565b6000614007600d836145f3565b915061401282614a31565b600d82019050919050565b600061402a6001836145f3565b915061403582614a5a565b600182019050919050565b600061404d6002836145f3565b915061405882614a83565b600282019050919050565b60006140706001836145f3565b915061407b82614aac565b600182019050919050565b6000614093600a836145f3565b915061409e82614ad5565b600a82019050919050565b60006140b66005836145f3565b91506140c182614afe565b600582019050919050565b60006140d96001836145f3565b91506140e482614b27565b600182019050919050565b60006140fc602c836145f3565b915061410782614b50565b602c82019050919050565b600061411f6002836145f3565b915061412a82614b9f565b600282019050919050565b6000614142601d836145f3565b915061414d82614bc8565b601d82019050919050565b6000614165600b836145f3565b915061417082614bf1565b600b82019050919050565b60006141886000836145f3565b915061419382614c1a565b600082019050919050565b60006141ab600c836145f3565b91506141b682614c1d565b600c82019050919050565b60006141ce600a836145f3565b91506141d982614c46565b600a82019050919050565b6141ed8161477f565b82525050565b6141fc8161478d565b82525050565b61420b8161478d565b82525050565b600061421d8285613e9a565b91506142298284613e9a565b91508190509392505050565b60006142418285613e9a565b915061424c82613fd7565b91506142588284613e9a565b91508190509392505050565b60006142708284613e9a565b915061427b826140cc565b915081905092915050565b60006142928287613e9a565b915061429d82614112565b91506142a98286613f04565b91506142b482614112565b91506142bf826141c1565b91506142cb8285613f04565b91506142d78284613f04565b91506142e2826140a9565b91506142ed82614063565b915081905095945050505050565b60006143078284613f04565b915081905092915050565b600061431d82613fb4565b91506143298285613f04565b91506143348261419e565b91506143408284613f04565b915061434b82614063565b91508190509392505050565b600061436282613fb4565b915061436e8285613f35565b915061437982613ffa565b91506143858284613f35565b915061439082614040565b91508190509392505050565b60006143a782614086565b91506143b38284613f04565b91506143be8261401d565b91506143c9826140ef565b915081905092915050565b60006143df82614135565b91506143eb8284613f04565b915081905092915050565b600061440182614158565b915061440d8284613f04565b915081905092915050565b60006144238261417b565b9150819050919050565b6000610160820190506144436000830184613dec565b92915050565b60006101608201905061445f6000830184613e43565b92915050565b6000602082019050818103600083015261447f8184613ecb565b905092915050565b600060408201905061449c6000830185614202565b6144a96020830184614202565b9392505050565b60006144ba6144cb565b90506144c6828261480b565b919050565b6000604051905090565b600067ffffffffffffffff8211156144f0576144ef61499f565b5b602082029050919050565b600067ffffffffffffffff8211156145165761451561499f565b5b602082029050919050565b600067ffffffffffffffff82111561453c5761453b61499f565b5b614545826149ce565b9050602081019050919050565b6000819050919050565b6000819050919050565b60008190508160005260206000209050919050565b6000600b9050919050565b6000600b9050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600081905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146098261477f565b91506146148361477f565b92508261ffff0382111561462b5761462a614912565b5b828201905092915050565b60006146418261478d565b915061464c8361478d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561468157614680614912565b5b828201905092915050565b60006146978261478d565b91506146a28361478d565b9250826146b2576146b1614941565b5b828204905092915050565b60006146c88261478d565b91506146d38361478d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561470c5761470b614912565b5b828202905092915050565b60006147228261477f565b915061472d8361477f565b9250828210156147405761473f614912565b5b828203905092915050565b60006147568261478d565b91506147618361478d565b92508282101561477457614773614912565b5b828203905092915050565b600061ffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147c45780820151818401526020810190506147a9565b838111156147d3576000848401525b50505050565b600060028204905060018216806147f157607f821691505b6020821081141561480557614804614970565b5b50919050565b614814826149ce565b810181811067ffffffffffffffff821117156148335761483261499f565b5b80604052505050565b60006148478261477f565b915061ffff82141561485c5761485b614912565b5b600182019050919050565b60006148728261478d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148a5576148a4614912565b5b600182019050919050565b60006148bb8261477f565b91506148c68361477f565b9250826148d6576148d5614941565b5b828206905092915050565b60006148ec8261478d565b91506148f78361478d565b92508261490757614906614941565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f7b2274726169745f74797065223a202200000000000000000000000000000000600082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f222c202276616c7565223a202200000000000000000000000000000000000000600082015250565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b226e616d65223a202200000000000000000000000000000000000000000000600082015250565b7f2e706e6722000000000000000000000000000000000000000000000000000000600082015250565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f2c20226465736372697074696f6e223a2022416e2041706520486172626f757260008201527f2053757065727961636874220000000000000000000000000000000000000000602082015250565b7f2c20000000000000000000000000000000000000000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f5375706572796163687420000000000000000000000000000000000000000000600082015250565b50565b7f222c202276616c7565223a200000000000000000000000000000000000000000600082015250565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b614c788161477f565b8114614c8357600080fd5b50565b614c8f8161478d565b8114614c9a57600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212201e0133f7661bcde35e17f0c7c030f24af782ea7174ca262b085662244b99600364736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063342f01a71461005157806387024e5514610081578063a374af40146100b1578063c4662447146100e1575b600080fd5b61006b60048036038101906100669190613d80565b610111565b6040516100789190614449565b60405180910390f35b61009b60048036038101906100969190613ced565b610287565b6040516100a89190614465565b60405180910390f35b6100cb60048036038101906100c69190613c99565b6103c3565b6040516100d8919061442d565b60405180910390f35b6100fb60048036038101906100f69190613cc3565b612a1b565b604051610108919061442d565b60405180910390f35b610119613aad565b6000604051806101600160405280600060ff168152602001600860ff168152602001601060ff168152602001601860ff168152602001602060ff168152602001602860ff168152602001603060ff168152602001603860ff168152602001604060ff168152602001604860ff168152602001605060ff16815250905061019d613aad565b600085856040516020016101b2929190614487565b6040516020818303038152906040528051906020012060001c905060005b600b81101561027a5760ff80168482600b8110610216577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160ff1683901c1660ff168382600b811061025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525050808061027290614867565b9150506101d0565b5081935050505092915050565b606060405160200161029890614418565b60405160208183030381529060405280519060200120846040516020016102bf91906142fb565b604051602081830303815290604052805190602001201415610306576102e4856130e0565b6040516020016102f491906143f6565b60405160208183030381529060405293505b60006103128487610111565b9050600061031f82612a1b565b905061032a816103c3565b905060008660405160200161033f919061439c565b60405160208183030381529060405290508061035a8361328d565b866103648b6130e0565b6040516020016103779493929190614286565b604051602081830303815290604052905060006103938261379f565b6040516020016103a391906143d4565b604051602081830303815290604052905080945050505050949350505050565b6103cb613ad0565b6000829050600181600161ffff16600b8110610410577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561055f5750602d81600361ffff16600b8110610461577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806104bc5750601a81600361ffff16600b81106104b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b8061050d5750600081600361ffff16600b8110610502577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b8061055e5750603281600361ffff16600b8110610553577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b806106535750600281600161ffff16600b81106105a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156106525750600281600361ffff16600b81106105f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806106515750600981600361ffff16600b8110610646577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b5b15610bdf5761ffff81600761ffff16600b8110610699577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505061ffff81600261ffff16600b81106106ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050600081600661ffff16600b8110610740577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156107b257600181600661ffff16600b811061078f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516107a091906145fe565b91509061ffff16908161ffff16815250505b600b81600661ffff16600b81106107f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561086457600181600661ffff16600b8110610841577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161085291906145fe565b91509061ffff16908161ffff16815250505b600d81600661ffff16600b81106108a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561091657600181600661ffff16600b81106108f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516109049190614717565b91509061ffff16908161ffff16815250505b600e81600661ffff16600b8110610956577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156109c857600181600661ffff16600b81106109a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516109b691906145fe565b91509061ffff16908161ffff16815250505b601081600661ffff16600b8110610a08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415610a7a57600281600661ffff16600b8110610a57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151610a6891906145fe565b91509061ffff16908161ffff16815250505b601381600661ffff16600b8110610aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415610b2c57600181600661ffff16600b8110610b09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151610b1a91906145fe565b91509061ffff16908161ffff16815250505b601781600661ffff16600b8110610b6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415610bde57600181600661ffff16600b8110610bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151610bcc91906145fe565b91509061ffff16908161ffff16815250505b5b600281600161ffff16600b8110610c1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148015610ccc5750600281600361ffff16600b8110610c70577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480610ccb5750600981600361ffff16600b8110610cc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b8015610d6f5750600081600461ffff16600b8110610d13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480610d6e5750600281600461ffff16600b8110610d63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b15610dc95761ffff81600461ffff16600b8110610db5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600081600661ffff16600b8110610e09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480610e645750600b81600661ffff16600b8110610e59577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610eb55750600d81600661ffff16600b8110610eaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610f065750600e81600661ffff16600b8110610efb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610f575750601081600661ffff16600b8110610f4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80610fa85750601381600661ffff16600b8110610f9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b156110565761ffff81600761ffff16600b8110610fee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505061ffff81600261ffff16600b8110611042577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600581600661ffff16600b8110611096577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806110f15750602181600661ffff16600b81106110e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b1561114b5761ffff81600761ffff16600b8110611137577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600181600161ffff16600b811061118b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561137f5750602d81600361ffff16600b81106111dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806112375750601a81600361ffff16600b811061122c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806112885750600081600361ffff16600b811061127d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806112d95750603281600361ffff16600b81106112ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b8061137e5750603681600361ffff16600b811061131f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161015801561137d5750603d81600361ffff16600b8110611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1611155b5b5b806114735750600281600161ffff16600b81106113c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156114725750600281600361ffff16600b8110611416577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806114715750600981600361ffff16600b8110611466577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b5b156118a557600a81600661ffff16600b81106114b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561152a57600181600661ffff16600b8110611507577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516115189190614717565b91509061ffff16908161ffff16815250505b602381600661ffff16600b811061156a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156115dc57600181600661ffff16600b81106115b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516115ca9190614717565b91509061ffff16908161ffff16815250505b601881600661ffff16600b811061161c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561168e57600181600661ffff16600b811061166b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161167c9190614717565b91509061ffff16908161ffff16815250505b601981600661ffff16600b81106116ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561174057600281600661ffff16600b811061171d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161172e91906145fe565b91509061ffff16908161ffff16815250505b601a81600661ffff16600b8110611780577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156117f257600181600661ffff16600b81106117cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516117e091906145fe565b91509061ffff16908161ffff16815250505b601481600661ffff16600b8110611832577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614156118a457600181600661ffff16600b8110611881577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161189291906145fe565b91509061ffff16908161ffff16815250505b5b600181600161ffff16600b81106118e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156119e35750603381600361ffff16600b8110611936577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806119915750603481600361ffff16600b8110611986577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806119e25750603581600361ffff16600b81106119d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b15611d6357600281600661ffff16600b8110611a28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611a9a57600181600661ffff16600b8110611a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611a889190614717565b91509061ffff16908161ffff16815250505b601181600661ffff16600b8110611ada577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611b4c57600181600661ffff16600b8110611b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611b3a9190614717565b91509061ffff16908161ffff16815250505b601281600661ffff16600b8110611b8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611bfe57600181600661ffff16600b8110611bdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611bec91906145fe565b91509061ffff16908161ffff16815250505b601681600661ffff16600b8110611c3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611cb057600181600661ffff16600b8110611c8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611c9e9190614717565b91509061ffff16908161ffff16815250505b601781600661ffff16600b8110611cf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161415611d6257600181600661ffff16600b8110611d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201818151611d5091906145fe565b91509061ffff16908161ffff16815250505b5b600181600161ffff16600b8110611da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148015611f975750601381600361ffff16600b8110611df4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480611e4f5750601e81600361ffff16600b8110611e44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80611ef45750603681600361ffff16600b8110611e95577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1610158015611ef35750603d81600361ffff16600b8110611ee7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1611155b5b80611f455750601081600361ffff16600b8110611f3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80611f965750602181600361ffff16600b8110611f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b801561203a5750600e81600661ffff16600b8110611fde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806120395750601081600661ffff16600b811061202e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b156120a257600181600661ffff16600b811061207f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181516120909190614717565b91509061ffff16908161ffff16815250505b600181600161ffff16600b81106120e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561218f5750601381600361ffff16600b8110612133577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148061218e5750601e81600361ffff16600b8110612183577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b156121e95761ffff81600761ffff16600b81106121d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600081600161ffff16600b8110612229577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156122855750600081600661ffff16600b811061227a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b80156122d75750600a81600561ffff16600b81106122cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b1561233f57600181600561ffff16600b811061231c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161232d9190614717565b91509061ffff16908161ffff16815250505b600081600161ffff16600b811061237f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156123db5750600081600661ffff16600b81106123d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b801561242d5750600b81600561ffff16600b8110612422577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b1561249557600181600561ffff16600b8110612472577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161248391906145fe565b91509061ffff16908161ffff16815250505b600181600161ffff16600b81106124d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156125825750601081600361ffff16600b8110612526577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806125815750602181600361ffff16600b8110612576577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b80156126255750600581600661ffff16600b81106125c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806126245750602181600661ffff16600b8110612619577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b1561268d57600181600661ffff16600b811061266a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815161267b9190614717565b91509061ffff16908161ffff16815250505b600181600161ffff16600b81106126cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614801561272a5750603681600361ffff16600b811061271e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1610155b801561277d5750603d81600361ffff16600b8110612771577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1611155b80156128715750600481600761ffff16600b81106127c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16148061281f5750600a81600761ffff16600b8110612814577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b806128705750600b81600761ffff16600b8110612865577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b156128cb5761ffff81600761ffff16600b81106128b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b600181600161ffff16600b811061290b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff161480156129b85750601081600361ffff16600b811061295c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1614806129b75750602181600361ffff16600b81106129ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16145b5b15612a125761ffff81600761ffff16600b81106129fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250505b80915050919050565b612a23613ad0565b612a2b613ad0565b60005b602c805490508161ffff161015612b5757602c8161ffff1681548110612a7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1684600061ffff16600b8110612ae3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111612b44578082600061ffff16600b8110612b2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050612b57565b8080612b4f9061483c565b915050612a2e565b5060005b602d805490508161ffff161015612c8457602d8161ffff1681548110612baa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1684600161ffff16600b8110612c10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111612c71578082600161ffff16600b8110612c59577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050612c84565b8080612c7c9061483c565b915050612b5b565b506000600261ffff1690505b6002600b612c9e919061474b565b811015612f7e57600082600161ffff16600b8110612ce5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff1690506000600261ffff1683612d03919061474b565b905061ffff8484600b8110612d41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505060005b602e8360038110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02018261ffff16600b8110612dd1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01805490508161ffff161015612f6857602e8360038110612e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02018261ffff16600b8110612e5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018161ffff1681548110612e98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff168785600b8110612ef9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111612f5557808585600b8110612f3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff1681525050612f68565b8080612f609061483c565b915050612d57565b5050508080612f7690614867565b915050612c90565b506001606384600961ffff16600b8110612fc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151612fd091906148b0565b612fda91906145fe565b81600961ffff16600b8110613018577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff16815250506001606484600a61ffff16600b811061306d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161307c91906148b0565b61308691906145fe565b81600a61ffff16600b81106130c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019061ffff16908161ffff168152505080915050919050565b60606000821415613128576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613288565b600082905060005b6000821461315a57808061314390614867565b915050600a82613153919061468c565b9150613130565b60008167ffffffffffffffff81111561319c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131ce5781602001600182028036833780820191505090505b5090505b60008514613281576001826131e7919061474b565b9150600a856131f691906148e1565b60306132029190614636565b60f81b81838151811061323e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561327a919061468c565b94506131d2565b8093505050505b919050565b606060006040518060400160405280600f81526020017f2261747472696275746573223a205b0000000000000000000000000000000000815250905060005b600b8161ffff16101561377357600161ffff168161ffff1614156132ef57613760565b61ffff8016848261ffff16600b8110613331577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16141561334557613760565b600061ffff168161ffff16141561340c57816133e582868461ffff16600b8110613398577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600161ffff16600b81106133db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161394a565b6040516020016133f6929190614211565b6040516020818303038152906040529150613760565b600961ffff168161ffff16141561355d57816135366000600961ffff16600b8110613460577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01805461346c906147d9565b80601f0160208091040260200160405190810160405280929190818152602001828054613498906147d9565b80156134e55780601f106134ba576101008083540402835291602001916134e5565b820191906000526020600020905b8154815290600101906020018083116134c857829003601f168201915b505050505086600961ffff16600b8110613528577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16613a79565b604051602001613547929190614235565b6040516020818303038152906040529150613760565b600a61ffff168161ffff1614156136ae57816136876000600a61ffff16600b81106135b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0180546135bd906147d9565b80601f01602080910402602001604051908101604052809291908181526020018280546135e9906147d9565b80156136365780601f1061360b57610100808354040283529160200191613636565b820191906000526020600020905b81548152906001019060200180831161361957829003601f168201915b505050505086600a61ffff16600b8110613679577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161ffff16613a79565b604051602001613698929190614235565b6040516020818303038152906040529150613760565b8161373d82868461ffff16600b81106136f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015187600161ffff16600b8110613733577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015161394a565b60405160200161374e929190614235565b60405160208183030381529060405291505b808061376b9061483c565b9150506132cc565b50806040516020016137859190614264565b604051602081830303815290604052905080915050919050565b60606000825114156137c257604051806020016040528060008152509050613945565b6000604051806060016040528060408152602001614c9e60409139905060006003600285516137f19190614636565b6137fb919061468c565b600461380791906146bd565b905060006020826138189190614636565b67ffffffffffffffff811115613857577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156138895781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015613904576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b82526001820191505061389d565b60038951066001811461391e576002811461392e57613939565b613d3d60f01b6002830352613939565b603d60f81b60018303525b50505050508093505050505b919050565b606060008461ffff16600b811061398a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01600b8361ffff16600381106139c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600b02018561ffff16600b8110613a09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018461ffff1681548110613a46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001604051602001613a61929190614357565b60405160208183030381529060405290509392505050565b606082613a85836130e0565b604051602001613a96929190614312565b604051602081830303815290604052905092915050565b604051806101600160405280600b90602082028036833780820191505090505090565b604051806101600160405280600b90602082028036833780820191505090505090565b6000613b06613b01846144d5565b6144b0565b90508082856020860282011115613b1c57600080fd5b60005b85811015613b4c5781613b328882613c6f565b845260208401935060208301925050600181019050613b1f565b5050509392505050565b6000613b69613b64846144fb565b6144b0565b90508082856020860282011115613b7f57600080fd5b60005b85811015613baf5781613b958882613c84565b845260208401935060208301925050600181019050613b82565b5050509392505050565b6000613bcc613bc784614521565b6144b0565b905082815260208101848484011115613be457600080fd5b613bef848285614797565b509392505050565b600082601f830112613c0857600080fd5b600b613c15848285613af3565b91505092915050565b600082601f830112613c2f57600080fd5b600b613c3c848285613b56565b91505092915050565b600082601f830112613c5657600080fd5b8135613c66848260208601613bb9565b91505092915050565b600081359050613c7e81614c6f565b92915050565b600081359050613c9381614c86565b92915050565b60006101608284031215613cac57600080fd5b6000613cba84828501613bf7565b91505092915050565b60006101608284031215613cd657600080fd5b6000613ce484828501613c1e565b91505092915050565b60008060008060808587031215613d0357600080fd5b6000613d1187828801613c84565b945050602085013567ffffffffffffffff811115613d2e57600080fd5b613d3a87828801613c45565b9350506040613d4b87828801613c84565b925050606085013567ffffffffffffffff811115613d6857600080fd5b613d7487828801613c45565b91505092959194509250565b60008060408385031215613d9357600080fd5b6000613da185828601613c84565b9250506020613db285828601613c84565b9150509250929050565b6000613dc883836141e4565b60208301905092915050565b6000613de083836141f3565b60208301905092915050565b613df58161457b565b613dff81846145c1565b9250613e0a82614552565b8060005b83811015613e3b578151613e228782613dbc565b9650613e2d836145a7565b925050600181019050613e0e565b505050505050565b613e4c81614586565b613e5681846145cc565b9250613e618261455c565b8060005b83811015613e92578151613e798782613dd4565b9650613e84836145b4565b925050600181019050613e65565b505050505050565b6000613ea582614591565b613eaf81856145d7565b9350613ebf8185602086016147a6565b80840191505092915050565b6000613ed68261459c565b613ee081856145e2565b9350613ef08185602086016147a6565b613ef9816149ce565b840191505092915050565b6000613f0f8261459c565b613f1981856145f3565b9350613f298185602086016147a6565b80840191505092915050565b60008154613f42816147d9565b613f4c81866145f3565b94506001821660008114613f675760018114613f7857613fab565b60ff19831686528186019350613fab565b613f8185614566565b60005b83811015613fa357815481890152600182019150602081019050613f84565b838801955050505b50505092915050565b6000613fc16010836145f3565b9150613fcc826149df565b601082019050919050565b6000613fe46001836145f3565b9150613fef82614a08565b600182019050919050565b6000614007600d836145f3565b915061401282614a31565b600d82019050919050565b600061402a6001836145f3565b915061403582614a5a565b600182019050919050565b600061404d6002836145f3565b915061405882614a83565b600282019050919050565b60006140706001836145f3565b915061407b82614aac565b600182019050919050565b6000614093600a836145f3565b915061409e82614ad5565b600a82019050919050565b60006140b66005836145f3565b91506140c182614afe565b600582019050919050565b60006140d96001836145f3565b91506140e482614b27565b600182019050919050565b60006140fc602c836145f3565b915061410782614b50565b602c82019050919050565b600061411f6002836145f3565b915061412a82614b9f565b600282019050919050565b6000614142601d836145f3565b915061414d82614bc8565b601d82019050919050565b6000614165600b836145f3565b915061417082614bf1565b600b82019050919050565b60006141886000836145f3565b915061419382614c1a565b600082019050919050565b60006141ab600c836145f3565b91506141b682614c1d565b600c82019050919050565b60006141ce600a836145f3565b91506141d982614c46565b600a82019050919050565b6141ed8161477f565b82525050565b6141fc8161478d565b82525050565b61420b8161478d565b82525050565b600061421d8285613e9a565b91506142298284613e9a565b91508190509392505050565b60006142418285613e9a565b915061424c82613fd7565b91506142588284613e9a565b91508190509392505050565b60006142708284613e9a565b915061427b826140cc565b915081905092915050565b60006142928287613e9a565b915061429d82614112565b91506142a98286613f04565b91506142b482614112565b91506142bf826141c1565b91506142cb8285613f04565b91506142d78284613f04565b91506142e2826140a9565b91506142ed82614063565b915081905095945050505050565b60006143078284613f04565b915081905092915050565b600061431d82613fb4565b91506143298285613f04565b91506143348261419e565b91506143408284613f04565b915061434b82614063565b91508190509392505050565b600061436282613fb4565b915061436e8285613f35565b915061437982613ffa565b91506143858284613f35565b915061439082614040565b91508190509392505050565b60006143a782614086565b91506143b38284613f04565b91506143be8261401d565b91506143c9826140ef565b915081905092915050565b60006143df82614135565b91506143eb8284613f04565b915081905092915050565b600061440182614158565b915061440d8284613f04565b915081905092915050565b60006144238261417b565b9150819050919050565b6000610160820190506144436000830184613dec565b92915050565b60006101608201905061445f6000830184613e43565b92915050565b6000602082019050818103600083015261447f8184613ecb565b905092915050565b600060408201905061449c6000830185614202565b6144a96020830184614202565b9392505050565b60006144ba6144cb565b90506144c6828261480b565b919050565b6000604051905090565b600067ffffffffffffffff8211156144f0576144ef61499f565b5b602082029050919050565b600067ffffffffffffffff8211156145165761451561499f565b5b602082029050919050565b600067ffffffffffffffff82111561453c5761453b61499f565b5b614545826149ce565b9050602081019050919050565b6000819050919050565b6000819050919050565b60008190508160005260206000209050919050565b6000600b9050919050565b6000600b9050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600081905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146098261477f565b91506146148361477f565b92508261ffff0382111561462b5761462a614912565b5b828201905092915050565b60006146418261478d565b915061464c8361478d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561468157614680614912565b5b828201905092915050565b60006146978261478d565b91506146a28361478d565b9250826146b2576146b1614941565b5b828204905092915050565b60006146c88261478d565b91506146d38361478d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561470c5761470b614912565b5b828202905092915050565b60006147228261477f565b915061472d8361477f565b9250828210156147405761473f614912565b5b828203905092915050565b60006147568261478d565b91506147618361478d565b92508282101561477457614773614912565b5b828203905092915050565b600061ffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147c45780820151818401526020810190506147a9565b838111156147d3576000848401525b50505050565b600060028204905060018216806147f157607f821691505b6020821081141561480557614804614970565b5b50919050565b614814826149ce565b810181811067ffffffffffffffff821117156148335761483261499f565b5b80604052505050565b60006148478261477f565b915061ffff82141561485c5761485b614912565b5b600182019050919050565b60006148728261478d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148a5576148a4614912565b5b600182019050919050565b60006148bb8261477f565b91506148c68361477f565b9250826148d6576148d5614941565b5b828206905092915050565b60006148ec8261478d565b91506148f78361478d565b92508261490757614906614941565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f7b2274726169745f74797065223a202200000000000000000000000000000000600082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f222c202276616c7565223a202200000000000000000000000000000000000000600082015250565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b226e616d65223a202200000000000000000000000000000000000000000000600082015250565b7f2e706e6722000000000000000000000000000000000000000000000000000000600082015250565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f2c20226465736372697074696f6e223a2022416e2041706520486172626f757260008201527f2053757065727961636874220000000000000000000000000000000000000000602082015250565b7f2c20000000000000000000000000000000000000000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f5375706572796163687420000000000000000000000000000000000000000000600082015250565b50565b7f222c202276616c7565223a200000000000000000000000000000000000000000600082015250565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b614c788161477f565b8114614c8357600080fd5b50565b614c8f8161478d565b8114614c9a57600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212201e0133f7661bcde35e17f0c7c030f24af782ea7174ca262b085662244b99600364736f6c63430008040033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.