text:
<?php

return [
    'Names' => [
        'Africa/Abidjan' => 'houa fakakiliniuisi mālie (Abidjan)',
        'Africa/Accra' => 'houa fakakiliniuisi mālie (Accra)',
        'Africa/Addis_Ababa' => 'houa fakaʻafelika-hahake (Addis Ababa)',
        'Africa/Algiers' => 'houa fakaʻeulope-loto (Algiers)',
        'Africa/Asmera' => 'houa fakaʻafelika-hahake (Asmara)',
        'Africa/Bamako' => 'houa fakakiliniuisi mālie (Bamako)',
        'Africa/Bangui' => 'houa fakaʻafelika-hihifo (Bangui)',
        'Africa/Banjul' => 'houa fakakiliniuisi mālie (Banjul)',
        'Africa/Bissau' => 'houa fakakiliniuisi mālie (Bissau)',
        'Africa/Blantyre' => 'houa fakaʻafelika-loto (Blantyre)',
        'Africa/Brazzaville' => 'houa fakaʻafelika-hihifo (Brazzaville)',
        'Africa/Bujumbura' => 'houa fakaʻafelika-loto (Bujumbura)',
        'Africa/Cairo' => 'houa fakaʻeulope-hahake (Cairo)',
        'Africa/Casablanca' => 'houa fakaʻeulope-hihifo (Casablanca)',
        'Africa/Ceuta' => 'houa fakaʻeulope-loto (Ceuta)',
        'Africa/Conakry' => 'houa fakakiliniuisi mālie (Conakry)',
        'Africa/Dakar' => 'houa fakakiliniuisi mālie (Dakar)',
        'Africa/Dar_es_Salaam' => 'houa fakaʻafelika-hahake (Dar es Salaam)',
        'Africa/Djibouti' => 'houa fakaʻafelika-hahake (Djibouti)',
        'Africa/Douala' => 'houa fakaʻafelika-hihifo (Douala)',
        'Africa/El_Aaiun' => 'houa fakaʻeulope-hihifo (El Aaiun)',
        'Africa/Freetown' => 'houa fakakiliniuisi mālie (Freetown)',
        'Africa/Gaborone' => 'houa fakaʻafelika-loto (Gaborone)',
        'Africa/Harare' => 'houa fakaʻafelika-loto (Harare)',
        'Africa/Johannesburg' => 'houa fakaʻafelika-tonga (Johannesburg)',
        'Africa/Juba' => 'houa fakaʻafelika-loto (Juba)',
        'Africa/Kampala' => 'houa fakaʻafelika-hahake (Kampala)',
        'Africa/Khartoum' => 'houa fakaʻafelika-loto (Khartoum)',
        'Africa/Kigali' => 'houa fakaʻafelika-loto (Kigali)',
        'Africa/Kinshasa' => 'houa fakaʻafelika-hihifo (Kinshasa)',
        'Africa/Lagos' => 'houa fakaʻafelika-hihifo (Lagos)',
        'Africa/Libreville' => 'houa fakaʻafelika-hihifo (Libreville)',
        'Africa/Lome' => 'houa fakakiliniuisi mālie (Lome)',
        'Africa/Luanda' => 'houa fakaʻafelika-hihifo (Luanda)',
        'Africa/Lubumbashi' => 'houa fakaʻafelika-loto (Lubumbashi)',
        'Africa/Lusaka' => 'houa fakaʻafelika-loto (Lusaka)',
        'Africa/Malabo' => 'houa fakaʻafelika-hihifo (Malabo)',
        'Africa/Maputo' => 'houa fakaʻafelika-loto (Maputo)',
        'Africa/Maseru' => 'houa fakaʻafelika-tonga (Maseru)',
        'Africa/Mbabane' => 'houa fakaʻafelika-tonga (Mbabane)',
        'Africa/Mogadishu' => 'houa fakaʻafelika-hahake (Mogadishu)',
        'Africa/Monrovia' => 'houa fakakiliniuisi mālie (Monrovia)',
        'Africa/Nairobi' => 'houa fakaʻafelika-hahake (Nairobi)',
        'Africa/Ndjamena' => 'houa fakaʻafelika-hihifo (Ndjamena)',
        'Africa/Niamey' => 'houa fakaʻafelika-hihifo (Niamey)',
        'Africa/Nouakchott' => 'houa fakakiliniuisi mālie (Nouakchott)',
        'Africa/Ouagadougou' => 'houa fakakiliniuisi mālie (Ouagadougou)',
        'Africa/Porto-Novo' => 'houa fakaʻafelika-hihifo (Porto-Novo)',
        'Africa/Sao_Tome' => 'houa fakakiliniuisi mālie (Sao Tomé)',
        'Africa/Tripoli' => 'houa fakaʻeulope-hahake (Tripoli)',
        'Africa/Tunis' => 'houa fakaʻeulope-loto (Tunis)',
        'Africa/Windhoek' => 'houa fakaʻafelika-loto (Windhoek)',
        'America/Adak' => 'houa fakahauaʻi (Adak)',
        'America/Anchorage' => 'houa fakaʻalasika (Anchorage)',
        'America/Anguilla' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Anguilla)',
        'America/Antigua' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Antigua)',
        'America/Araguaina' => 'houa fakapalāsila (Araguaina)',
        'America/Argentina/La_Rioja' => 'houa fakaʻasenitina (La Rioja)',
        'America/Argentina/Rio_Gallegos' => 'houa fakaʻasenitina (Rio Gallegos)',
        'America/Argentina/Salta' => 'houa fakaʻasenitina (Salta)',
        'America/Argentina/San_Juan' => 'houa fakaʻasenitina (San Juan)',
        'America/Argentina/San_Luis' => 'houa fakaʻasenitina (San Luis)',
        'America/Argentina/Tucuman' => 'houa fakaʻasenitina (Tucuman)',
        'America/Argentina/Ushuaia' => 'houa fakaʻasenitina (Ushuaia)',
        'America/Aruba' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Aruba)',
        'America/Asuncion' => 'houa fakapalakuai (Asunción)',
        'America/Bahia' => 'houa fakapalāsila (Bahia)',
        'America/Bahia_Banderas' => 'houa fakaʻamelika-tokelau loto (Bahia Banderas)',
        'America/Barbados' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Barbados)',
        'America/Belem' => 'houa fakapalāsila (Belem)',
        'America/Belize' => 'houa fakaʻamelika-tokelau loto (Belize)',
        'America/Blanc-Sablon' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Blanc-Sablon)',
        'America/Boa_Vista' => 'houa fakaʻamasōne (Boa Vista)',
        'America/Bogota' => 'houa fakakolomipia (Bogota)',
        'America/Boise' => 'houa fakaʻamelika-tokelau moʻunga (Boise)',
        'America/Buenos_Aires' => 'houa fakaʻasenitina (Buenos Aires)',
        'America/Cambridge_Bay' => 'houa fakaʻamelika-tokelau moʻunga (Cambridge Bay)',
        'America/Campo_Grande' => 'houa fakaʻamasōne (Campo Grande)',
        'America/Cancun' => 'houa fakaʻamelika-tokelau hahake (Cancun)',
        'America/Caracas' => 'houa fakavenesuela (Caracas)',
        'America/Catamarca' => 'houa fakaʻasenitina (Catamarca)',
        'America/Cayenne' => 'houa fakakuiana-fakafalanisē (Cayenne)',
        'America/Cayman' => 'houa fakaʻamelika-tokelau hahake (Cayman)',
        'America/Chicago' => 'houa fakaʻamelika-tokelau loto (Chicago)',
        'America/Chihuahua' => 'houa fakamekisikou-pasifika (Chihuahua)',
        'America/Coral_Harbour' => 'houa fakaʻamelika-tokelau hahake (Atikokan)',
        'America/Cordoba' => 'houa fakaʻasenitina (Cordoba)',
        'America/Costa_Rica' => 'houa fakaʻamelika-tokelau loto (Costa Rica)',
        'America/Creston' => 'houa fakaʻamelika-tokelau moʻunga (Creston)',
        'America/Cuiaba' => 'houa fakaʻamasōne (Cuiaba)',
        'America/Curacao' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Curaçao)',
        'America/Danmarkshavn' => 'houa fakakiliniuisi mālie (Danmarkshavn)',
        'America/Dawson' => 'houa fakaʻamelika-tokelau moʻunga (Dawson)',
        'America/Dawson_Creek' => 'houa fakaʻamelika-tokelau moʻunga (Dawson Creek)',
        'America/Denver' => 'houa fakaʻamelika-tokelau moʻunga (Denver)',
        'America/Detroit' => 'houa fakaʻamelika-tokelau hahake (Detroit)',
        'America/Dominica' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Dominica)',
        'America/Edmonton' => 'houa fakaʻamelika-tokelau moʻunga (Edmonton)',
        'America/Eirunepe' => 'houa fakaʻakelī (Eirunepe)',
        'America/El_Salvador' => 'houa fakaʻamelika-tokelau loto (El Salvador)',
        'America/Fort_Nelson' => 'houa fakaʻamelika-tokelau moʻunga (Fort Nelson)',
        'America/Fortaleza' => 'houa fakapalāsila (Fortaleza)',
        'America/Glace_Bay' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Glace Bay)',
        'America/Godthab' => 'houa fakafonuamata-hihifo (Nuuk)',
        'America/Goose_Bay' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Goose Bay)',
        'America/Grand_Turk' => 'houa fakaʻamelika-tokelau hahake (Grand Turk)',
        'America/Grenada' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Grenada)',
        'America/Guadeloupe' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Guadeloupe)',
        'America/Guatemala' => 'houa fakaʻamelika-tokelau loto (Guatemala)',
        'America/Guayaquil' => 'houa fakaʻekuetoa (Guayaquil)',
        'America/Guyana' => 'houa fakakuiana (Guyana)',
        'America/Halifax' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Halifax)',
        'America/Havana' => 'houa fakakiupa (Havana)',
        'America/Hermosillo' => 'houa fakamekisikou-pasifika (Hermosillo)',
        'America/Indiana/Knox' => 'houa fakaʻamelika-tokelau loto (Knox, Indiana)',
        'America/Indiana/Marengo' => 'houa fakaʻamelika-tokelau hahake (Marengo, Indiana)',
        'America/Indiana/Petersburg' => 'houa fakaʻamelika-tokelau hahake (Petersburg, Indiana)',
        'America/Indiana/Tell_City' => 'houa fakaʻamelika-tokelau loto (Tell City, Indiana)',
        'America/Indiana/Vevay' => 'houa fakaʻamelika-tokelau hahake (Vevay, Indiana)',
        'America/Indiana/Vincennes' => 'houa fakaʻamelika-tokelau hahake (Vincennes, Indiana)',
        'America/Indiana/Winamac' => 'houa fakaʻamelika-tokelau hahake (Winamac, Indiana)',
        'America/Indianapolis' => 'houa fakaʻamelika-tokelau hahake (Indianapolis)',
        'America/Inuvik' => 'houa fakaʻamelika-tokelau moʻunga (Inuvik)',
        'America/Iqaluit' => 'houa fakaʻamelika-tokelau hahake (Iqaluit)',
        'America/Jamaica' => 'houa fakaʻamelika-tokelau hahake (Jamaica)',
        'America/Jujuy' => 'houa fakaʻasenitina (Jujuy)',
        'America/Juneau' => 'houa fakaʻalasika (Juneau)',
        'America/Kentucky/Monticello' => 'houa fakaʻamelika-tokelau hahake (Monticello, Kentucky)',
        'America/Kralendijk' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Kralendijk)',
        'America/La_Paz' => 'houa fakapolīvia (La Paz)',
        'America/Lima' => 'houa fakapelū (Lima)',
        'America/Los_Angeles' => 'houa fakaʻamelika-tokelau pasifika (Los Angeles)',
        'America/Louisville' => 'houa fakaʻamelika-tokelau hahake (Louisville)',
        'America/Lower_Princes' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Lower Prince's Quarter)',
        'America/Maceio' => 'houa fakapalāsila (Maceio)',
        'America/Managua' => 'houa fakaʻamelika-tokelau loto (Managua)',
        'America/Manaus' => 'houa fakaʻamasōne (Manaus)',
        'America/Marigot' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Marigot)',
        'America/Martinique' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Martinique)',
        'America/Matamoros' => 'houa fakaʻamelika-tokelau loto (Matamoros)',
        'America/Mazatlan' => 'houa fakamekisikou-pasifika (Mazatlan)',
        'America/Mendoza' => 'houa fakaʻasenitina (Mendoza)',
        'America/Menominee' => 'houa fakaʻamelika-tokelau loto (Menominee)',
        'America/Merida' => 'houa fakaʻamelika-tokelau loto (Merida)',
        'America/Metlakatla' => 'houa fakaʻalasika (Metlakatla)',
        'America/Mexico_City' => 'houa fakaʻamelika-tokelau loto (Mexico City)',
        'America/Miquelon' => 'houa fakasā-piea-mo-mikeloni (Miquelon)',
        'America/Moncton' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Moncton)',
        'America/Monterrey' => 'houa fakaʻamelika-tokelau loto (Monterrey)',
        'America/Montevideo' => 'houa fakaʻulukuai (Montevideo)',
        'America/Montreal' => 'Taimi Kānata (Montreal)',
        'America/Montserrat' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Montserrat)',
        'America/Nassau' => 'houa fakaʻamelika-tokelau hahake (Nassau)',
        'America/New_York' => 'houa fakaʻamelika-tokelau hahake (Niu ʻIoke)',
        'America/Nipigon' => 'houa fakaʻamelika-tokelau hahake (Nipigon)',
        'America/Nome' => 'houa fakaʻalasika (Nome)',
        'America/Noronha' => 'houa fakafēnanito-te-nolōnia (Noronha)',
        'America/North_Dakota/Beulah' => 'houa fakaʻamelika-tokelau loto (Beulah, North Dakota)',
        'America/North_Dakota/Center' => 'houa fakaʻamelika-tokelau loto (Center, North Dakota)',
        'America/North_Dakota/New_Salem' => 'houa fakaʻamelika-tokelau loto (New Salem, North Dakota)',
        'America/Ojinaga' => 'houa fakaʻamelika-tokelau moʻunga (Ojinaga)',
        'America/Panama' => 'houa fakaʻamelika-tokelau hahake (Panama)',
        'America/Pangnirtung' => 'houa fakaʻamelika-tokelau hahake (Pangnirtung)',
        'America/Paramaribo' => 'houa fakasuliname (Paramaribo)',
        'America/Phoenix' => 'houa fakaʻamelika-tokelau moʻunga (Phoenix)',
        'America/Port-au-Prince' => 'houa fakaʻamelika-tokelau hahake (Port-au-Prince)',
        'America/Port_of_Spain' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Port of Spain)',
        'America/Porto_Velho' => 'houa fakaʻamasōne (Porto Velho)',
        'America/Puerto_Rico' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Puerto Rico)',
        'America/Punta_Arenas' => 'houa fakasili (Punta Arenas)',
        'America/Rainy_River' => 'houa fakaʻamelika-tokelau loto (Rainy River)',
        'America/Rankin_Inlet' => 'houa fakaʻamelika-tokelau loto (Rankin Inlet)',
        'America/Recife' => 'houa fakapalāsila (Recife)',
        'America/Regina' => 'houa fakaʻamelika-tokelau loto (Regina)',
        'America/Resolute' => 'houa fakaʻamelika-tokelau loto (Resolute)',
        'America/Rio_Branco' => 'houa fakaʻakelī (Rio Branco)',
        'America/Santa_Isabel' => 'houa fakamekisikou-tokelauhihifo (Santa Isabel)',
        'America/Santarem' => 'houa fakapalāsila (Santarem)',
        'America/Santiago' => 'houa fakasili (Santiago)',
        'America/Santo_Domingo' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Santo Domingo)',
        'America/Sao_Paulo' => 'houa fakapalāsila (Sao Paulo)',
        'America/Scoresbysund' => 'houa fakafonuamata-hahake (Ittoqqortoormiit)',
        'America/Sitka' => 'houa fakaʻalasika (Sitka)',
        'America/St_Barthelemy' => 'houa fakaʻamelika-tokelau ʻatalanitiki (St. Barthélemy)',
        'America/St_Johns' => 'houa fakafonuaʻilofoʻou (St. John's)',
        'America/St_Kitts' => 'houa fakaʻamelika-tokelau ʻatalanitiki (St. Kitts)',
        'America/St_Lucia' => 'houa fakaʻamelika-tokelau ʻatalanitiki (St. Lucia)',
        'America/St_Thomas' => 'houa fakaʻamelika-tokelau ʻatalanitiki (St. Thomas)',
        'America/St_Vincent' => 'houa fakaʻamelika-tokelau ʻatalanitiki (St. Vincent)',
        'America/Swift_Current' => 'houa fakaʻamelika-tokelau loto (Swift Current)',
        'America/Tegucigalpa' => 'houa fakaʻamelika-tokelau loto (Tegucigalpa)',
        'America/Thule' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Thule)',
        'America/Thunder_Bay' => 'houa fakaʻamelika-tokelau hahake (Thunder Bay)',
        'America/Tijuana' => 'houa fakaʻamelika-tokelau pasifika (Tijuana)',
        'America/Toronto' => 'houa fakaʻamelika-tokelau hahake (Toronto)',
        'America/Tortola' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Tortola)',
        'America/Vancouver' => 'houa fakaʻamelika-tokelau pasifika (Vancouver)',
        'America/Whitehorse' => 'houa fakaʻamelika-tokelau moʻunga (Whitehorse)',
        'America/Winnipeg' => 'houa fakaʻamelika-tokelau loto (Winnipeg)',
        'America/Yakutat' => 'houa fakaʻalasika (Yakutat)',
        'America/Yellowknife' => 'houa fakaʻamelika-tokelau moʻunga (Yellowknife)',
        'Antarctica/Casey' => 'houa fakakeesi (Casey)',
        'Antarctica/Davis' => 'houa fakatavisi (Davis)',
        'Antarctica/DumontDUrville' => 'houa fakatūmoni-tūvile (Dumont d'Urville)',
        'Antarctica/Macquarie' => 'houa fakaʻaositelēlia-hahake (Macquarie)',
        'Antarctica/Mawson' => 'houa fakamausoni (Mawson)',
        'Antarctica/McMurdo' => 'houa fakanuʻusila (McMurdo)',
        'Antarctica/Palmer' => 'houa fakasili (Palmer)',
        'Antarctica/Rothera' => 'houa fakalotela (Rothera)',
        'Antarctica/Syowa' => 'houa fakasioua (Syowa)',
        'Antarctica/Troll' => 'houa fakakiliniuisi mālie (Troll)',
        'Antarctica/Vostok' => 'houa fakavositoki (Vostok)',
        'Arctic/Longyearbyen' => 'houa fakaʻeulope-loto (Longyearbyen)',
        'Asia/Aden' => 'houa fakaʻalepea (Aden)',
        'Asia/Almaty' => 'houa fakakasakitani-hahake (Almaty)',
        'Asia/Amman' => 'houa fakaʻeulope-hahake (Amman)',
        'Asia/Anadyr' => 'houa fakalūsia-ʻanatili (Anadyr)',
        'Asia/Aqtau' => 'houa fakakasakitani-hihifo (Aqtau)',
        'Asia/Aqtobe' => 'houa fakakasakitani-hihifo (Aqtobe)',
        'Asia/Ashgabat' => 'houa fakatūkimenisitani (Ashgabat)',
        'Asia/Atyrau' => 'houa fakakasakitani-hihifo (Atyrau)',
        'Asia/Baghdad' => 'houa fakaʻalepea (Baghdad)',
        'Asia/Bahrain' => 'houa fakaʻalepea (Bahrain)',
        'Asia/Baku' => 'houa fakaʻasapaisani (Baku)',
        'Asia/Bangkok' => 'houa fakaʻinitosiaina (Bangkok)',
        'Asia/Barnaul' => 'Taimi Lūsia (Barnaul)',
        'Asia/Beirut' => 'houa fakaʻeulope-hahake (Beirut)',
        'Asia/Bishkek' => 'houa fakakīkisitani (Bishkek)',
        'Asia/Brunei' => 'houa fakapulunei (Brunei)',
        'Asia/Calcutta' => 'houa fakaʻinitia (Kolkata)',
        'Asia/Chita' => 'houa fakalūsia-ʻiākutisiki (Chita)',
        'Asia/Choibalsan' => 'houa fakaʻulānipātā (Choibalsan)',
        'Asia/Colombo' => 'houa fakaʻinitia (Colombo)',
        'Asia/Damascus' => 'houa fakaʻeulope-hahake (Damascus)',
        'Asia/Dhaka' => 'houa fakapāngilātesi (Dhaka)',
        'Asia/Dili' => 'houa fakatimoa-hahake (Dili)',
        'Asia/Dubai' => 'houa fakakūlifi (Dubai)',
        'Asia/Dushanbe' => 'houa fakatasikitani (Dushanbe)',
        'Asia/Famagusta' => 'houa fakaʻeulope-hahake (Famagusta)',
        'Asia/Gaza' => 'houa fakaʻeulope-hahake (Gaza)',
        'Asia/Hebron' => 'houa fakaʻeulope-hahake (Hebron)',
        'Asia/Hong_Kong' => 'houa fakahongi-kongi (Hong Kong)',
        'Asia/Hovd' => 'houa fakahovite (Hovd)',
        'Asia/Irkutsk' => 'houa fakalūsia-ʻīkutisiki (Irkutsk)',
        'Asia/Jakarta' => 'houa fakaʻinitonisia-hihifo (Jakarta)',
        'Asia/Jayapura' => 'houa fakaʻinitonisia-hahake (Jayapura)',
        'Asia/Jerusalem' => 'houa fakaʻisileli (Selūsalema)',
        'Asia/Kabul' => 'houa fakaʻafikānisitani (Kabul)',
        'Asia/Kamchatka' => 'houa fakalūsia-petelopavilovisiki (Kamchatka)',
        'Asia/Karachi' => 'houa fakapākisitani (Karachi)',
        'Asia/Katmandu' => 'houa fakanepali (Kathmandu)',
        'Asia/Khandyga' => 'houa fakalūsia-ʻiākutisiki (Khandyga)',
        'Asia/Krasnoyarsk' => 'houa fakalūsia-kalasinoiāsiki (Krasnoyarsk)',
        'Asia/Kuala_Lumpur' => 'houa fakamaleisia (Kuala Lumpur)',
        'Asia/Kuching' => 'houa fakamaleisia (Kuching)',
        'Asia/Kuwait' => 'houa fakaʻalepea (Kuwait)',
        'Asia/Macau' => 'houa fakasiaina (Macau)',
        'Asia/Magadan' => 'houa fakalūsia-makatani (Magadan)',
        'Asia/Makassar' => 'houa fakaʻinitonisia-loto (Makassar)',
        'Asia/Manila' => 'houa fakafilipaine (Manila)',
        'Asia/Muscat' => 'houa fakakūlifi (Muscat)',
        'Asia/Nicosia' => 'houa fakaʻeulope-hahake (Nicosia)',
        'Asia/Novokuznetsk' => 'houa fakalūsia-kalasinoiāsiki (Novokuznetsk)',
        'Asia/Novosibirsk' => 'houa fakalūsia-novosipīsiki (Novosibirsk)',
        'Asia/Omsk' => 'houa fakalūsia-ʻomisiki (Omsk)',
        'Asia/Oral' => 'houa fakakasakitani-hihifo (Oral)',
        'Asia/Phnom_Penh' => 'houa fakaʻinitosiaina (Phnom Penh)',
        'Asia/Pontianak' => 'houa fakaʻinitonisia-hihifo (Pontianak)',
        'Asia/Pyongyang' => 'houa fakakōlea (Pyongyang)',
        'Asia/Qatar' => 'houa fakaʻalepea (Qatar)',
        'Asia/Qostanay' => 'houa fakakasakitani-hahake (Qostanay)',
        'Asia/Qyzylorda' => 'houa fakakasakitani-hihifo (Qyzylorda)',
        'Asia/Rangoon' => 'houa fakapema (Rangoon)',
        'Asia/Riyadh' => 'houa fakaʻalepea (Riyadh)',
        'Asia/Saigon' => 'houa fakaʻinitosiaina (Ho Chi Minh)',
        'Asia/Sakhalin' => 'houa fakalūsia-sakāline (Sakhalin)',
        'Asia/Samarkand' => 'houa fakaʻusipekitani (Samarkand)',
        'Asia/Seoul' => 'houa fakakōlea (Seoul)',
        'Asia/Shanghai' => 'houa fakasiaina (Shanghai)',
        'Asia/Singapore' => 'houa fakasingapoa (Singapore)',
        'Asia/Srednekolymsk' => 'houa fakalūsia-makatani (Srednekolymsk)',
        'Asia/Taipei' => 'houa fakataipei',
        'Asia/Tashkent' => 'houa fakaʻusipekitani (Tashkent)',
        'Asia/Tbilisi' => 'houa fakaseōsia (Tbilisi)',
        'Asia/Tehran' => 'houa fakaʻilaani (Tehran)',
        'Asia/Thimphu' => 'houa fakapūtani (Thimphu)',
        'Asia/Tokyo' => 'houa fakasiapani (Tokyo)',
        'Asia/Tomsk' => 'Taimi Lūsia (Tomsk)',
        'Asia/Ulaanbaatar' => 'houa fakaʻulānipātā (Ulaanbaatar)',
        'Asia/Urumqi' => 'Taimi Siaina (Urumqi)',
        'Asia/Ust-Nera' => 'houa fakalūsia-valativositoki (Ust-Nera)',
        'Asia/Vientiane' => 'houa fakaʻinitosiaina (Vientiane)',
        'Asia/Vladivostok' => 'houa fakalūsia-valativositoki (Vladivostok)',
        'Asia/Yakutsk' => 'houa fakalūsia-ʻiākutisiki (Yakutsk)',
        'Asia/Yekaterinburg' => 'houa fakalūsia-ʻiekatelinepūki (Yekaterinburg)',
        'Asia/Yerevan' => 'houa fakaʻāmenia (Yerevan)',
        'Atlantic/Azores' => 'houa fakaʻāsolesi (Azores)',
        'Atlantic/Bermuda' => 'houa fakaʻamelika-tokelau ʻatalanitiki (Bermuda)',
        'Atlantic/Canary' => 'houa fakaʻeulope-hihifo (Canary)',
        'Atlantic/Cape_Verde' => 'houa fakamuiʻi-vēte (Cape Verde)',
        'Atlantic/Faeroe' => 'houa fakaʻeulope-hihifo (Faroe)',
        'Atlantic/Madeira' => 'houa fakaʻeulope-hihifo (Madeira)',
        'Atlantic/Reykjavik' => 'houa fakakiliniuisi mālie (Reykjavik)',
        'Atlantic/South_Georgia' => 'houa fakasiosiatonga (South Georgia)',
        'Atlantic/St_Helena' => 'houa fakakiliniuisi mālie (St. Helena)',
        'Atlantic/Stanley' => 'houa fakaʻotumotu-fokulani (Stanley)',
        'Australia/Adelaide' => 'houa fakaʻaositelēlia-loto (Atelaite)',
        'Australia/Brisbane' => 'houa fakaʻaositelēlia-hahake (Pelisipane)',
        'Australia/Broken_Hill' => 'houa fakaʻaositelēlia-loto (Broken Hill)',
        'Australia/Currie' => 'houa fakaʻaositelēlia-hahake (Currie)',
        'Australia/Darwin' => 'houa fakaʻaositelēlia-loto (Darwin)',
        'Australia/Eucla' => 'houa fakaʻaositelēlia-loto-hihifo (Eucla)',
        'Australia/Hobart' => 'houa fakaʻaositelēlia-hahake (Hobart)',
        'Australia/Lindeman' => 'houa fakaʻaositelēlia-hahake (Lindeman)',
        'Australia/Lord_Howe' => 'houa fakamotuʻeikihoue (Lord Howe)',
        'Australia/Melbourne' => 'houa fakaʻaositelēlia-hahake (Melipoane)',
        'Australia/Perth' => 'houa fakaʻaositelēlia-hihifo (Perth)',
        'Australia/Sydney' => 'houa fakaʻaositelēlia-hahake (Senē)',
        'CST6CDT' => 'houa fakaʻamelika-tokelau loto',
        'EST5EDT' => 'houa fakaʻamelika-tokelau hahake',
        'Etc/GMT' => 'houa fakakiliniuisi mālie',
        'Etc/UTC' => 'taimi fakaemāmani',
        'Europe/Amsterdam' => 'houa fakaʻeulope-loto (Amsterdam)',
        'Europe/Andorra' => 'houa fakaʻeulope-loto (Andorra)',
        'Europe/Astrakhan' => 'houa fakalūsia-mosikou (Astrakhan)',
        'Europe/Athens' => 'houa fakaʻeulope-hahake (ʻAtenisi)',
        'Europe/Belgrade' => 'houa fakaʻeulope-loto (Belgrade)',
        'Europe/Berlin' => 'houa fakaʻeulope-loto (Berlin)',
        'Europe/Bratislava' => 'houa fakaʻeulope-loto (Bratislava)',
        'Europe/Brussels' => 'houa fakaʻeulope-loto (Brussels)',
        'Europe/Bucharest' => 'houa fakaʻeulope-hahake (Bucharest)',
        'Europe/Budapest' => 'houa fakaʻeulope-loto (Budapest)',
        'Europe/Busingen' => 'houa fakaʻeulope-loto (Busingen)',
        'Europe/Chisinau' => 'houa fakaʻeulope-hahake (Chisinau)',
        'Europe/Copenhagen' => 'houa fakaʻeulope-loto (Copenhagen)',
        'Europe/Dublin' => 'houa fakakiliniuisi mālie (Dublin)',
        'Europe/Gibraltar' => 'houa fakaʻeulope-loto (Gibraltar)',
        'Europe/Guernsey' => 'houa fakakiliniuisi mālie (Guernsey)',
        'Europe/Helsinki' => 'houa fakaʻeulope-hahake (Helsinki)',
        'Europe/Isle_of_Man' => 'houa fakakiliniuisi mālie (Isle of Man)',
        'Europe/Istanbul' => 'Taimi Toake (Istanbul)',
        'Europe/Jersey' => 'houa fakakiliniuisi mālie (Jersey)',
        'Europe/Kaliningrad' => 'houa fakaʻeulope-hahake (Kaliningrad)',
        'Europe/Kiev' => 'houa fakaʻeulope-hahake (Kiev)',
        'Europe/Kirov' => 'Taimi Lūsia (Kirov)',
        'Europe/Lisbon' => 'houa fakaʻeulope-hihifo (Lisbon)',
        'Europe/Ljubljana' => 'houa fakaʻeulope-loto (Ljubljana)',
        'Europe/London' => 'houa fakakiliniuisi mālie (Lonitoni)',
        'Europe/Luxembourg' => 'houa fakaʻeulope-loto (Luxembourg)',
        'Europe/Madrid' => 'houa fakaʻeulope-loto (Madrid)',
        'Europe/Malta' => 'houa fakaʻeulope-loto (Malta)',
        'Europe/Mariehamn' => 'houa fakaʻeulope-hahake (Mariehamn)',
        'Europe/Minsk' => 'houa fakalūsia-mosikou (Minsk)',
        'Europe/Monaco' => 'houa fakaʻeulope-loto (Monaco)',
        'Europe/Moscow' => 'houa fakalūsia-mosikou',
        'Europe/Oslo' => 'houa fakaʻeulope-loto (Oslo)',
        'Europe/Paris' => 'houa fakaʻeulope-loto (Palesi)',
        'Europe/Podgorica' => 'houa fakaʻeulope-loto (Podgorica)',
        'Europe/Prague' => 'houa fakaʻeulope-loto (Prague)',
        'Europe/Riga' => 'houa fakaʻeulope-hahake (Riga)',
        'Europe/Rome' => 'houa fakaʻeulope-loto (Loma)',
        'Europe/Samara' => 'houa fakalūsia-samala (Samara)',
        'Europe/San_Marino' => 'houa fakaʻeulope-loto (San Marino)',
        'Europe/Sarajevo' => 'houa fakaʻeulope-loto (Sarajevo)',
        'Europe/Saratov' => 'houa fakalūsia-mosikou (Saratov)',
        'Europe/Simferopol' => 'houa fakalūsia-mosikou (Simferopol)',
        'Europe/Skopje' => 'houa fakaʻeulope-loto (Skopje)',
        'Europe/Sofia' => 'houa fakaʻeulope-hahake (Sofia)',
        'Europe/Stockholm' => 'houa fakaʻeulope-loto (Stockholm)',
        'Europe/Tallinn' => 'houa fakaʻeulope-hahake (Tallinn)',
        'Europe/Tirane' => 'houa fakaʻeulope-loto (Tirane)',
        'Europe/Ulyanovsk' => 'houa fakalūsia-mosikou (Ulyanovsk)',
        'Europe/Uzhgorod' => 'houa fakaʻeulope-hahake (Uzhhorod)',
        'Europe/Vaduz' => 'houa fakaʻeulope-loto (Vaduz)',
        'Europe/Vatican' => 'houa fakaʻeulope-loto (Vatikani)',
        'Europe/Vienna' => 'houa fakaʻeulope-loto (Vienna)',
        'Europe/Vilnius' => 'houa fakaʻeulope-hahake (Vilnius)',
        'Europe/Volgograd' => 'houa fakalūsia-volikokalati (Volgograd)',
        'Europe/Warsaw' => 'houa fakaʻeulope-loto (Warsaw)',
        'Europe/Zagreb' => 'houa fakaʻeulope-loto (Zagreb)',
        'Europe/Zaporozhye' => 'houa fakaʻeulope-hahake (Zaporozhye)',
        'Europe/Zurich' => 'houa fakaʻeulope-loto (Zurich)',
        'Indian/Antananarivo' => 'houa fakaʻafelika-hahake (Antananarivo)',
        'Indian/Chagos' => 'houa fakamoanaʻinitia (Chagos)',
        'Indian/Christmas' => 'houa fakamotukilisimasi (Christmas)',
        'Indian/Cocos' => 'houa fakamotukokosi (Cocos)',
        'Indian/Comoro' => 'houa fakaʻafelika-hahake (Comoro)',
        'Indian/Kerguelen' => 'houa fakaʻanetātikafalanisē (Kerguelen)',
        'Indian/Mahe' => 'houa fakaʻotumotu-seiseli (Mahe)',
        'Indian/Maldives' => 'houa fakamalativisi (Maldives)',
        'Indian/Mauritius' => 'houa fakamaulitiusi (Mauritius)',
        'Indian/Mayotte' => 'houa fakaʻafelika-hahake (Mayotte)',
        'Indian/Reunion' => 'houa fakalēunioni (Réunion)',
        'MST7MDT' => 'houa fakaʻamelika-tokelau moʻunga',
        'PST8PDT' => 'houa fakaʻamelika-tokelau pasifika',
        'Pacific/Apia' => 'houa fakaapia',
        'Pacific/Auckland' => 'houa fakanuʻusila (ʻAokalani)',
        'Pacific/Bougainville' => 'houa fakapapuaniukini (Pukanivila)',
        'Pacific/Chatham' => 'houa fakasatihami (Chatham)',
        'Pacific/Easter' => 'houa fakalapanui',
        'Pacific/Efate' => 'houa fakavanuatu (Efate)',
        'Pacific/Enderbury' => 'houa fakaʻotumotufoinikisi (ʻEnitipulī)',
        'Pacific/Fakaofo' => 'houa fakatokelau (Fakaofo)',
        'Pacific/Fiji' => 'houa fakafisi',
        'Pacific/Funafuti' => 'houa fakatūvalu (Funafuti)',
        'Pacific/Galapagos' => 'houa fakakalapakosi (Galapagos)',
        'Pacific/Gambier' => 'houa fakakamipiē',
        'Pacific/Guadalcanal' => 'houa fakaʻotumotusolomone (Kuatākanali)',
        'Pacific/Guam' => 'houa fakakamolo (Kuami)',
        'Pacific/Honolulu' => 'houa fakahauaʻi (Honolulu)',
        'Pacific/Johnston' => 'houa fakahauaʻi (Sionesitoni)',
        'Pacific/Kiritimati' => 'houa fakaʻotumotulaine (Kilisimasi)',
        'Pacific/Kosrae' => 'houa fakakosilae',
        'Pacific/Kwajalein' => 'houa fakaʻotumotumasolo (Kuasaleni)',
        'Pacific/Majuro' => 'houa fakaʻotumotumasolo (Masulo)',
        'Pacific/Marquesas' => 'houa fakamākesasi (Malikuesa)',
        'Pacific/Midway' => 'houa fakahaʻamoa (Mitiuai)',
        'Pacific/Nauru' => 'houa fakanaulu',
        'Pacific/Niue' => 'houa fakaniuē',
        'Pacific/Norfolk' => 'houa fakanoafōki',
        'Pacific/Noumea' => 'houa fakakaletōniafoʻou (Noumea)',
        'Pacific/Pago_Pago' => 'houa fakahaʻamoa (Pangopango)',
        'Pacific/Palau' => 'houa fakapalau',
        'Pacific/Pitcairn' => 'houa fakapitikani (Pitikeni)',
        'Pacific/Ponape' => 'houa fakapōnapē (Ponapē)',
        'Pacific/Port_Moresby' => 'houa fakapapuaniukini (Taulanga Molesipi)',
        'Pacific/Rarotonga' => 'houa fakaʻotumotukuki (Lalotonga)',
        'Pacific/Saipan' => 'houa fakakamolo (Saʻipani)',
        'Pacific/Tahiti' => 'houa fakatahisi',
        'Pacific/Tarawa' => 'houa fakakilipasi (Talava)',
        'Pacific/Tongatapu' => 'houa fakatonga (Tongatapu)',
        'Pacific/Truk' => 'houa fakatūke',
        'Pacific/Wake' => 'houa fakamotuueke',
        'Pacific/Wallis' => 'houa fakaʻuvea mo futuna',
    ],
    'Meta' => [
    ],
];


text:
package com.destiny1020.hranalyzer.rest.repo;

import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import com.destiny1020.hranalyzer.domain.org.Team;

@RepositoryRestResource(collectionResourceRel = "data", path = "team")
public interface TeamRepository extends PagingAndSortingRepository<Team, Long> {

}

redpajama_set_name: RedPajamaGithub


text:
using namespace SpeedTree;

///////////////////////////////////////////////////////////////////////
//  Static variables

st_uint32 CFixedNumber::m_uiBitsUsedForFraction = 8;
st_float32 CFixedNumber::m_fOneOverStep = float(1 << CFixedNumber::m_uiBitsUsedForFraction);
st_float32 CFixedNumber::m_fStep = (1.0f / CFixedNumber::m_fOneOverStep);


text:
export default /* glsl */`
#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )

	varying vec2 vUv;
	uniform mat3 uvTransform;

#endif
`;


text:
<resources>
    <string name="rich_editor">ayo-rich-editor</string>
    <string name="error_load_expressions">表情载入失败</string>
    <string name="rich_refresh_again">重新加载</string>
    <string name="expression_download_failed">表情下载失败</string>
    <string name="expression_download_failed_no_engouth_space">存储空间不足,表情下载失败</string>
    <string name="expression_total_max">最多只能输入%1$s个表情哦</string>
    <string name="write_sth">正文</string>
    <string name="hint_create_thread">发表贴子正文</string>
    <string name="error_upload_video">上传视频失败</string>
    <string name="add_pic_over_limit_show">上传图片总量超过限制</string>
    <string name="sending">正在发送</string>
    <string name="uncomment_nocontent">不能发表空贴</string>
    <string name="not_supportupload">还不能支持上传</string>
    <string name="not_supportupload1280">还不能支持上传高度超过1280px的GIF图片</string>
    <string name="mb_gifpic">MB以上的GIF图片</string>
    <string name="useless_pic">无效图片</string>
    <string name="reminder">温馨提示</string>
    <string name="publish_comment_failure">发表失败</string>
    <string name="send_suc">发表成功</string>
    <string name="thread_title_count_limit">标题最多36个字符</string>
    <string name="thread_title">标题(选填,最多36个字符)</string>
    <string name="atlast_sixpic">最多支持上传6张图片</string>
    <string name="toast_upload_video_count">每个贴子只能上传1个小视频哦</string>
</resources>


text:
<style>
  .demo-box {
    .el-date-editor + .el-date-editor {
      margin-left: 10px;
    }
  }
</style>

## Selector de Tiempo

Use el Time Picker para input de tipo time.

### Selector de tiempo fijo

Provee una lista de tiempo fijo para que los usuarios escogan.

:::demo Use el tag `el-time-select`, se pueden asignar tiempo de inicio, tiempo de finalización y salto de tiempo con `start`, `end` y `step`.
```html
<el-time-select
  v-model="value1"
  :picker-options="{
    start: '08:30',
    step: '00:15',
    end: '18:30'
  }"
  placeholder="Select time">
</el-time-select>

<script>
  export default {
    data() {
      return {
        value1: ''
      };
    }
  }
</script>
```
:::

### Selector de tiempo arbitrario

Un tiempo arbitrario puede ser escogido.

:::demo Al usar el tag `el-time-picker`, es posible limitar el rango de tiempo al especificar `selectableRange`. Por defecto, es posible hacer scroll con la rueda del mouse para escoger el tiempo, alternativamente se pueden utilizar las flechas de control cuando el atributo `arrow-control` esté establecido.

```html
<template>
  <el-time-picker
    v-model="value2"
    :picker-options="{
      selectableRange: '18:30:00 - 20:30:00'
    }"
    placeholder="Arbitrary time">
  </el-time-picker>
  <el-time-picker
    arrow-control
    v-model="value3"
    :picker-options="{
      selectableRange: '18:30:00 - 20:30:00'
    }"
    placeholder="Arbitrary time">
  </el-time-picker>
</template>

<script>
  export default {
    data() {
      return {
        value2: new Date(2016, 9, 10, 18, 40),
        value3: new Date(2016, 9, 10, 18, 40)
      };
    }
  }
</script>
```
:::

### Rango de tiempo fijo

Si se escoge el tiempo de inicio al principio, el tiempo de finalización cambiará respectivamente.

:::demo
```html
<template>
  <el-time-select
    placeholder="Start time"
    v-model="startTime"
    :picker-options="{
      start: '08:30',
      step: '00:15',
      end: '18:30'
    }">
  </el-time-select>
  <el-time-select
    placeholder="End time"
    v-model="endTime"
    :picker-options="{
      start: '08:30',
      step: '00:15',
      end: '18:30',
      minTime: startTime
    }">
  </el-time-select>
</template>

<script>
  export default {
    data() {
      return {
        startTime: '',
        endTime: ''
      };
    }
  }
</script>
```
:::

### Rango de tiempo arbitrario

Es posible escoger un rango de tiempo arbitrario.

:::demo Es posible seleccionar un rango de tiempo al añadir el atributo `is-range`. También, `arrow-control` es soportado en modo de rango.
```html
<template>
  <el-time-picker
    is-range
    v-model="value4"
    range-separator="To"
    start-placeholder="Start time"
    end-placeholder="End time">
  </el-time-picker>
  <el-time-picker
    is-range
    arrow-control
    v-model="value5"
    range-separator="To"
    start-placeholder="Start time"
    end-placeholder="End time">
  </el-time-picker>
</template>

<script>
  export default {
    data() {
      return {
        value4: [new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)],
        value5: [new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)]
      };
    }
  }
</script>
```
:::

<script>
  export default {
    data() {
      return {
        value1: '',
        value2: new Date(2016, 9, 10, 18, 40),
        value3: new Date(2016, 9, 10, 18, 40),
        value4: [new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)],
        value5: [new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)],
        startTime: '',
        endTime: ''
      };
    }
  }
</script>

### Atributos
| Atributo          | Descripción                              | Tipo                                     | Valores aceptados                        | Por defecto          |
| ----------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | -------------------- |
| readonly          | si el Time Picker está en modo de sólo lectura | boolean                                  | —                                        | false                |
| disabled          | si el Time Picker se encuentra deshabilitado | boolean                                  | —                                        | false                |
| editable          | si el input puede ser editado            | boolean                                  | —                                        | true                 |
| clearable         | si mostrar el botón de borrado           | boolean                                  | —                                        | true                 |
| size              | tamaño del input                         | string                                   | medium / small / mini                    | —                    |
| placeholder       | placeholder en un modo fuera de rango    | string                                   | —                                        | —                    |
| start-placeholder | placeholder para el tiempo de inicio en modo de rango | string                                   | —                                        | —                    |
| end-placeholder   | placeholder para el tiempo de finalización en modo de rango | string                                   | —                                        | —                    |
| is-range          | si es posible escoger un rango de tiempo, solo funciona con `<el-time-picker>` | boolean                                  | —                                        | false                |
| arrow-control     | si es posible escoger el tiempo usando los botones de flecha, solo funciona con `<el-time-picker>` | boolean                                  | —                                        | false                |
| value             | valor del selector                       | Fecha para Selector de Tiempo, string para el Seleccionador de Tiempo | hour `HH`, minute `mm`, second `ss`      | HH:mm:ss             |
| align             | alineación                               | left / center / right                    | left                                     |                      |
| popper-class      | nombre de clase personalizada para el dropdown del Time Picker | string                                   | —                                        | —                    |
| picker-options    | opciones adicionales, revisar la tabla posterior | object                                   | —                                        | {}                   |
| range-separator   | separador de rango                       | string                                   | -                                        | '-'                  |
| default-value     | opcional, fecha por defecto del calendario | Fecha para Selector de Tiempo, string para el Seleccionador de Tiempo | cualquier cosa aceptada por `new Date()` para el Selector de Tiempo,  Selector de Tiempo, valor seleccionable para el Seleccionador de Tiempo | —                    |
| value-format      | opcional, solo para Time Picker, formato del valor vinculado. Si no se especifica, el valor vinculado será un objeto Date | string                                   | ver [date formats](#/es/component/date-picker#date-formats) | —                    |
| name              | como `name` en input nativo              | string                                   | —                                        | —                    |
| prefix-icon       | Clase personalizada para el icono de prefijado | string                                   | —                                        | el-icon-time         |
| clear-icon        | Clase personalizada para el icono `clear` | string                                   | —                                        | el-icon-circle-close |

### Opciones para Time Picker
| Atributo | Descripción                              | Tipo   | Valores aceptados | Por defecto |
| -------- | ---------------------------------------- | ------ | ----------------- | ----------- |
| start    | tiempo de inicio                         | string | —                 | 09:00       |
| end      | tiempo de finalización                   | string | —                 | 18:00       |
| step     | salto de tiempo                          | string | —                 | 00:30       |
| minTime  | tiempo mínimo, cualquier tiempo antes de éste será deshabilitado | string | —                 | 00:00       |
| maxTime  | tiempo máximo, cualquier tiempo después de éste será deshabilitado | string | —                 | —           |

### Opciones para Time Picker
| Atributo        | Descripción                              | Tipo           | Valores aceptados                   | Por defecto |
| --------------- | ---------------------------------------- | -------------- | ----------------------------------- | ----------- |
| selectableRange | rango de tiempo disponible p.ej. `'18:30:00 - 20:30:00'`ó`['09:30:00 - 12:00:00', '14:30:00 - 18:30:00']` | string / array | —                                   | —           |
| format          | formato para el selector                 | string         | hour `HH`, minute `mm`, second `ss` | HH:mm:ss    |

### Eventos
| Nombre de Evento | Descripción                              | Parámetros                     |
| ---------------- | ---------------------------------------- | ------------------------------ |
| change           | se lanza cuando el usuario confirma el valor | valor vinculado del componente |
| blur             | se lanza cuando el input se difumina     | instancia del componente       |
| focus            | se lanza cuando el input se enfoca       | instancia del componente       |


text:
redirect_from:
  - /download/mac/dev
redirect_to: https://toggl-open-source.github.io/toggldesktop/download/mac-dev/
---


text:
package org.apache.nifi.minifi.bootstrap;

import org.apache.nifi.minifi.bootstrap.service.MiNiFiStdLogHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ShutdownHook extends Thread {

    private static final Logger LOGGER = LoggerFactory.getLogger("org.apache.nifi.minifi.bootstrap.Command");

    private final RunMiNiFi runner;
    private final MiNiFiStdLogHandler miNiFiStdLogHandler;

    public ShutdownHook(RunMiNiFi runner, MiNiFiStdLogHandler miNiFiStdLogHandler) {
        this.runner = runner;
        this.miNiFiStdLogHandler = miNiFiStdLogHandler;
    }

    @Override
    public void run() {
        LOGGER.info("Initiating Shutdown of MiNiFi...");

        miNiFiStdLogHandler.shutdown();
        runner.shutdownChangeNotifier();
        runner.getPeriodicStatusReporterManager().shutdownPeriodicStatusReporters();
        runner.setAutoRestartNiFi(false);
        runner.run(BootstrapCommand.STOP);
    }
}


text:
"""
Django settings for Flowcell Tool project.

For more information on this file, see
https://docs.djangoproject.com/en/dev/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/dev/ref/settings/
"""
from __future__ import absolute_import, unicode_literals

import environ
import itertools

# (flowcelltool/config/settings/common.py - 3 = flowcelltool/)
ROOT_DIR = environ.Path(__file__) - 3
APPS_DIR = ROOT_DIR.path('flowcelltool')

env = environ.Env()

# .env file, should load only in development environment
READ_DOT_ENV_FILE = env.bool('DJANGO_READ_DOT_ENV_FILE', default=False)

if READ_DOT_ENV_FILE:
    # Operating System Environment variables have precedence over variables
    # defined in the .env file, that is to say variables from the .env files
    # will only be used if not defined as environment variables.
    env_file = str(ROOT_DIR.path('.env'))
    env.read_env(env_file)

# APP CONFIGURATION
# ------------------------------------------------------------------------------
DJANGO_APPS = (
    # Default Django apps:
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # Useful template tags:
    'django.contrib.humanize',

    # For Postgres full-text-search:
    'django.contrib.postgres',

    # Admin
    'django.contrib.admin',
)
THIRD_PARTY_APPS = (
    'crispy_forms',  # Form layouts
    'markdown_deux',  # Markdown support
    'rules.apps.AutodiscoverRulesConfig',  # django rules engine
    'db_file_storage',  # storing files in database
    'rest_framework',     # Django REST Framework (DRF)
    'knox',  # Django REST Knox
    'generic_relations',  # generic relations for DRF
    'formtools',  # for form wizards
)

# Apps specific for this project go here.
LOCAL_APPS = (
    # custom users app
    'flowcelltool.users.apps.UsersConfig',
    # flowcell management
    'flowcelltool.flowcells',
    # messages with attachments
    'flowcelltool.threads',
)

# See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS

# MIDDLEWARE CONFIGURATION
# ------------------------------------------------------------------------------
MIDDLEWARE = (
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

# MIGRATIONS CONFIGURATION
# ------------------------------------------------------------------------------
MIGRATION_MODULES = {
    'sites': 'flowcelltool.contrib.sites.migrations'
}

# DEBUG
# ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#debug
DEBUG = env.bool('DJANGO_DEBUG', False)

# FIXTURE CONFIGURATION
# ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-FIXTURE_DIRS # noqa
FIXTURE_DIRS = (
    str(APPS_DIR.path('fixtures')),
)

# EMAIL CONFIGURATION
# ------------------------------------------------------------------------------
EMAIL_BACKEND = env(
    'DJANGO_EMAIL_BACKEND',
    default='django.core.mail.backends.smtp.EmailBackend')
EMAIL_SENDER = env('EMAIL_SENDER', default='noreply@example.com')
EMAIL_SUBJECT_PREFIX = env('EMAIL_SUBJECT_PREFIX', default='')

# MANAGER CONFIGURATION
# ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#admins
ADMINS = (
    ("""Manuel Holtgrewe""", 'manuel.holtgrewe@bihealth.de'),
)

# See: https://docs.djangoproject.com/en/dev/ref/settings/#managers
MANAGERS = ADMINS

# SITE CONFIGURATION
# ------------------------------------------------------------------------------
# Hosts/domain names that are valid for this site
# See https://docs.djangoproject.com/en/1.6/ref/settings/#allowed-hosts
ALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS', default=['*'])
# END SITE CONFIGURATION

# DATABASE CONFIGURATION
# ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#databases
DATABASES = {
    'default': env.db('DATABASE_URL', default='postgres:///flowcelltool'),
}
DATABASES['default']['ATOMIC_REQUESTS'] = True

# GENERAL CONFIGURATION
# ------------------------------------------------------------------------------
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'UTC'

# See: https://docs.djangoproject.com/en/dev/ref/settings/#language-code
LANGUAGE_CODE = 'en-us'

# See: https://docs.djangoproject.com/en/dev/ref/settings/#site-id
SITE_ID = 1

# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n
USE_I18N = True

# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-l10n
USE_L10N = True

# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-tz
USE_TZ = True

# TEMPLATE CONFIGURATION
# ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#templates
TEMPLATES = [
    {
        # See: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATES-BACKEND    # noqa
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # See: https://docs.djangoproject.com/en/dev/ref/settings/#template-dirs
        'DIRS': [
            str(APPS_DIR.path('templates')),
        ],
        'OPTIONS': {
            # See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug   # noqa
            'debug': DEBUG,
            # See: https://docs.djangoproject.com/en/dev/ref/settings/#template-loaders # noqa
            # https://docs.djangoproject.com/en/dev/ref/templates/api/#loader-types # noqa
            'loaders': [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            ],
            # See: https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors  # noqa
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
                # Your stuff: custom template context processors go here
            ],
        },
    },
]

# See: http://django-crispy-forms.readthedocs.io/en/latest/install.html#template-packs # noqa
CRISPY_TEMPLATE_PACK = 'bootstrap4'

# STATIC FILE CONFIGURATION
# ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root
STATIC_ROOT = str(ROOT_DIR('staticfiles'))

# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url
STATIC_URL = '/static/'

# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS # noqa
STATICFILES_DIRS = (
    str(APPS_DIR.path('static')),
)

# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders # noqa
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

# MEDIA CONFIGURATION
# ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-root
MEDIA_ROOT = str(APPS_DIR('media'))

# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url
MEDIA_URL = '/media/'

# URL Configuration
# ------------------------------------------------------------------------------
ROOT_URLCONF = 'config.urls'

# See: https://docs.djangoproject.com/en/dev/ref/settings/#wsgi-application
WSGI_APPLICATION = 'config.wsgi.application'

# PASSWORD VALIDATION
# https://docs.djangoproject.com/en/dev/ref/settings/#auth-password-validators
# ------------------------------------------------------------------------------

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.'
                'UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.'
                'MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.'
                'CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.'
                'NumericPasswordValidator',
    },
]

# AUTHENTICATION CONFIGURATION
# ------------------------------------------------------------------------------
AUTHENTICATION_BACKENDS = (
    'rules.permissions.ObjectPermissionBackend',
    'django.contrib.auth.backends.ModelBackend',
)

# Some really nice defaults
ACCOUNT_AUTHENTICATION_METHOD = 'username'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'

ACCOUNT_ALLOW_REGISTRATION = env.bool('DJANGO_ACCOUNT_ALLOW_REGISTRATION', True)
ACCOUNT_ADAPTER = 'flowcelltool.users.adapters.AccountAdapter'
SOCIALACCOUNT_ADAPTER = 'flowcelltool.users.adapters.SocialAccountAdapter'

# Custom user app defaults
# Select the correct user model
AUTH_USER_MODEL = 'users.User'
LOGIN_REDIRECT_URL = 'flowcell_list'
LOGIN_URL = 'login'

# SLUGLIFIER
AUTOSLUG_SLUGIFY_FUNCTION = 'slugify.slugify'

# Location of root django.contrib.admin URL, use {% url 'admin:index' %}
ADMIN_URL = r'^admin/'

# Your common stuff: Below this line define 3rd party library settings
# ------------------------------------------------------------------------------

# File storage configuration
# ------------------------------------------------------------------------------
DEFAULT_FILE_STORAGE = 'db_file_storage.storage.DatabaseFileStorage'

# LDAP configuration
# ------------------------------------------------------------------------------

# Enable LDAP if configured
if env.bool('ENABLE_LDAP', None) is True:
    # import ldap
    # from django_auth_ldap.config import LDAPSearch
    # FLYNN WORKAROUND
    import pip

    try:
        import ldap

    except ImportError:
        print('Flynn issue #3932 workaround: installing ldap..')

        pip.main([
            'install',
            'git+git://github.com/holtgrewe/pyldap.git@'
            'fce3b934e9b2d7d1a538fc37d7c4ed4cfe18fae1#egg=pyldap'])

        import ldap

    # from django_auth_ldap.config import LDAPSearch

    try:
        from django_auth_ldap.config import LDAPSearch

    except Exception:
        print('Flynn issue #3932 workaround: installing django-auth-ldap..')
        pip.main([
            'install',
            'django-auth-ldap==1.2.8'])

        from django_auth_ldap.config import LDAPSearch
    # FLYNN WORKAROUND ENDS

    # Default values
    LDAP_DEFAULT_CONN_OPTIONS = {
        ldap.OPT_REFERRALS: 0}
    LDAP_DEFAULT_FILTERSTR = '(sAMAccountName=%(user)s)'
    LDAP_DEFAULT_ATTR_MAP = {
        'first_name': 'givenName',
        'last_name': 'sn',
        'email': 'mail'}

    # Primary LDAP server
    AUTH_LDAP_SERVER_URI = env.str('AUTH_LDAP_SERVER_URI', None)
    AUTH_LDAP_BIND_DN = env.str('AUTH_LDAP_BIND_DN', None)
    AUTH_LDAP_BIND_PASSWORD = env.str('AUTH_LDAP_BIND_PASSWORD', None)
    AUTH_LDAP_CONNECTION_OPTIONS = LDAP_DEFAULT_CONN_OPTIONS

    AUTH_LDAP_USER_SEARCH = LDAPSearch(
        env.str('AUTH_LDAP_USER_SEARCH_BASE', None),
        ldap.SCOPE_SUBTREE, LDAP_DEFAULT_FILTERSTR)
    AUTH_LDAP_USER_ATTR_MAP = LDAP_DEFAULT_ATTR_MAP
    AUTH_LDAP_USERNAME_DOMAIN = env.str('AUTH_LDAP_USERNAME_DOMAIN', None)

    AUTHENTICATION_BACKENDS = tuple(itertools.chain(
        ('flowcelltool.users.backends.PrimaryLDAPBackend',),
        AUTHENTICATION_BACKENDS,
    ))

    # Secondary LDAP server (optional)
    AUTH_LDAP2_USERNAME_SUFFIX = None

    if env.bool('ENABLE_LDAP_SECONDARY', None) is True:
        # Primary LDAP server
        AUTH_LDAP2_SERVER_URI = env.str('AUTH_LDAP2_SERVER_URI', None)
        AUTH_LDAP2_BIND_DN = env.str('AUTH_LDAP2_BIND_DN', None)
        AUTH_LDAP2_BIND_PASSWORD = env.str('AUTH_LDAP2_BIND_PASSWORD', None)
        AUTH_LDAP2_CONNECTION_OPTIONS = LDAP_DEFAULT_CONN_OPTIONS

        AUTH_LDAP2_USER_SEARCH = LDAPSearch(
            env.str('AUTH_LDAP2_USER_SEARCH_BASE', None),
            ldap.SCOPE_SUBTREE, LDAP_DEFAULT_FILTERSTR)
        AUTH_LDAP2_USER_ATTR_MAP = LDAP_DEFAULT_ATTR_MAP
        AUTH_LDAP2_USERNAME_DOMAIN = env.str('AUTH_LDAP2_USERNAME_DOMAIN')

        AUTHENTICATION_BACKENDS = tuple(itertools.chain(
            ('flowcelltool.users.backends.SecondaryLDAPBackend',),
            AUTHENTICATION_BACKENDS,
        ))

# Django REST Framework Configuration
# ------------------------------------------------------------------------------

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'knox.auth.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'dry_rest_permissions.generics.DRYPermissions',
    ),
    'DEFAULT_PAGINATION_CLASS':
        'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 100
}

# Disable/Enable Sending of emails
# ------------------------------------------------------------------------------

FLOWCELLS_SEND_EMAILS = env.bool('FLOWCELLTOOL_SEND_EMAILS', False)


text:
var compression = require('compression');
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var hbs = require('hbs');

var app = express();

// Views
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
hbs.registerPartials(path.join(__dirname, 'views/partials'));
hbs.registerPartials(path.join(__dirname, 'views/components'));

// HBS Helpers
//var helpers = require('./util/hbs-helpers');
//var helperNames = Object.keys(helpers);
//for(let value of helperNames) { hbs.registerHelper(value, helpers[value]) }

// Middlewares
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

// Webpack Dev
if (app.get('env') === 'development') {
  var webpack = require('webpack');
  var webpackDevMiddleware = require('webpack-dev-middleware');
  var webpackDevConfig = require('../config/webpack.dev.config');
  var compiler = webpack(webpackDevConfig);
  app.use(webpackDevMiddleware(compiler, {
      publicPath: webpackDevConfig.output.publicPath,
      stats: {colors: true}
  }));
} else {
  app.use(express.static(path.join(__dirname, 'public')));
  app.use(compression());
}

// Routes
var routes = require('./routes/index');
app.use('/', routes);

// Catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// Error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;


text:
When /^I debug the app shell$/ do
  STDOUT.puts "Opening shell in a separate window."
  if RUBY_PLATFORM =~ /darwin/
    ruby_app_shell("open -a Terminal .")
  else
    raise "Don't know how to open an app shell for #{RUBY_PLATFORM}; please contribute your knowledge to #{__FILE__}"
  end
  STDOUT.puts "Press Enter to continue Cucumber execution..."
  STDOUT.flush
  STDIN.readline
end


text:
.DEFAULT_GOAL:= build
MAKEFLAGS = -j1
PATH := ./node_modules/.bin:$(PATH)
SHELL := /bin/bash
args = $(filter-out $@, $(MAKECMDGOALS))
.PHONY: all install clean deep-clean reinstall setup build compile build-source-maps compile-source-maps docs docs-server docs-build docs-compile watch lint test coverage test-coverage code-coverage report-coverage report-code-coverage ci prepatch patch minor major publish release

all: build test

install:
	npm install

# remove the build and log folders
clean:
	rm -rf dist logs

# remove all files that are ignored by git
deep-clean:
	make clean
	rm -rf node_modules/ dist/ .nyc_output/ npm-debug.log yarn-error.log

# reinstall the node_modules and start with a fresh node build
reinstall setup:
	make deep-clean
	make install

# build the source files
build compile:
	make clean
	babel app --out-dir dist $(args)

# makes it easier to build files with source maps without errors
# from other make commands
build-source-maps compile-source-maps:
	make clean
	babel app --out-dir dist --source-maps $(args)

# start the server for the documentation
docs docs-server:
	docs server

# compile the documentation
docs-build docs-compile:
	docs compile docs-public

# When watching for changes we can assume it's a development env
# so build files with source maps
watch:
	make build-source-maps -- --watch $(args)

# lint test files
lint:
	command -v eslint >/dev/null 2>&1 && eslint 'app' 'test' || ./node_modules/lint-rules/node_modules/.bin/eslint 'app' 'test';

# run unit tests
test:
	ava $(args)

# run coverage for the tests
coverage test-coverage code-coverage:
	# if there's no instance source maps files then build the files with source maps
	@[ -f ./dist/index.js.map ] || (echo "building files with source maps" && make build-source-maps)
	NODE_ENV="test" nyc --silent -- ava --verbose --no-cache

# These commands only run the report of the code coverage
report-coverage report-code-coverage:
	@if [ -d ./.nyc_output ]; then \
	 	NODE_ENV="test" nyc report; \
	else \
		make test-coverage report-coverage; \
	fi

# posts code coverage to coveralls
post-coverage:
	@if [ -d ./.nyc_output ]; then \
		nyc report --reporter=text-lcov | coveralls; \
	else \
		make test-coverage post-coverage; \
	fi

# The command the ci server runs
ci:
	make lint || exit 1
	# if the tests fail then it will exit with an error
	make coverage || exit 1
	# show the coverage report
	nyc report
	# check check-coverage and if it fails then exit
	nyc check-coverage --statements 95 --functions 95 --lines 95 || exit 1

publish release:
	make reinstall
	make ci || exit 1
	# rebuild project without sourcemaps
	make build
	np --no-cleanup --yolo $(args)


text:
package org.openkilda.messaging.model.grpc;

public enum LogicalPortType {
    LAG,
    BFD,
    RESERVED;

    /**
     * Create enum by number.
     *
     * @param value an int value.
     * @return the enum value
     */
    public static LogicalPortType forNumber(int value) {
        switch (value) {
            case 1:
                return LAG;
            case 2:
                return BFD;
            default:
                throw new IllegalArgumentException("Invalid logical port type");
        }
    }
}


text:
package org.g4studio.core.mvc.xstruts.action;

import java.io.Serializable;
import java.util.HashMap;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
import org.g4studio.core.mvc.xstruts.config.FormBeanConfig;
import org.g4studio.core.mvc.xstruts.config.FormPropertyConfig;
import org.g4studio.core.mvc.xstruts.util.RequestUtils;

/**
 *

 * Implementation of DynaClass for DynaActionForm
 * classes that allow developers to define ActionForms without having to
 * individually code all of the classes. NOTE - This class is
 * only used in the internal implementation of dynamic action form beans.
 * Application developers never need to consult this documentation.
 *

 *
 * @version $Rev: 421119 $ $Date: 2006-01-17 07:26:20 -0500 (Tue, 17 Jan 2006) $
 * @since Struts 1.1
 */
public class DynaActionFormClass implements DynaClass, Serializable {
	// ----------------------------------------------------- Instance Variables

	/**
	 *

	 * The DynaActionForm implementation Class which
	 * we will use to create new bean instances.
	 *

	 */
	protected transient Class beanClass = null;

	/**
	 *

	 * The form bean configuration information for this class.
	 *

	 */
	protected FormBeanConfig config = null;

	/**
	 *

	 * The "dynamic class name" for this DynaClass.
	 *

	 */
	protected String name = null;

	/**
	 *

	 * The set of dynamic properties that are part of this DynaClass.
	 *

	 */
	protected DynaProperty[] properties = null;

	/**
	 *

	 * The set of dynamic properties that are part of this
	 * DynaClass, keyed by the property name. Individual descriptor
	 * instances will be the same instances as those in the
	 * properties list.
	 */
	protected HashMap propertiesMap = new HashMap();

	// ----------------------------------------------------------- Constructors

	/**
	 *

	 * Construct a new DynaActionFormClass for the specified form
	 * bean configuration. This constructor is private;
	 * DynaActionFormClass instances will be created as needed via
	 * calls to the static createDynaActionFormClass() method.
	 *

	 *
	 * @param config
	 *            The FormBeanConfig instance describing the properties of the
	 *            bean to be created
	 * @throws IllegalArgumentException
	 *             if the bean implementation class specified in the
	 *             configuration is not DynaActionForm (or a subclass of
	 *             DynaActionForm)
	 */
	public DynaActionFormClass(FormBeanConfig config) {
		introspect(config);
	}

	// ------------------------------------------------------ DynaClass Methods

	/**
	 *

	 * Return the name of this DynaClass (analogous to the
	 * getName() method of java.lang.Class, which
	 * allows the same DynaClass implementation class to support
	 * different dynamic classes, with different sets of properties.
	 *
	 * @return The name of this DynaClass.
	 */
	public String getName() {
		return (this.name);
	}

	/**
	 *

	 * Return a property descriptor for the specified property, if it exists;
	 * otherwise, return null.
	 *

	 *
	 * @param name
	 *            Name of the dynamic property for which a descriptor is
	 *            requested
	 * @return A property descriptor for the specified property.
	 * @throws IllegalArgumentException
	 *             if no property name is specified
	 */
	public DynaProperty getDynaProperty(String name) {
		if (name == null) {
			throw new IllegalArgumentException("No property name specified");
		}

		return ((DynaProperty) propertiesMap.get(name));
	}

	/**
	 *

	 * Return an array of DynaPropertys for the properties
	 * currently defined in this DynaClass. If no properties are
	 * defined, a zero-length array will be returned.
	 *

	 *
	 * @return An array of property instances for this class.
	 */
	public DynaProperty[] getDynaProperties() {
		return (properties);

		// :FIXME: Should we really be implementing
		// getBeanInfo instead, which returns property descriptors
		// and a bunch of other stuff?
	}

	/**
	 *

	 * Instantiate and return a new {@link DynaActionForm} instance, associated
	 * with this DynaActionFormClass. The properties of the
	 * returned {@link DynaActionForm} will have been initialized to the default
	 * values specified in the form bean configuration information.
	 *

	 *
	 * @return A new {@link DynaActionForm} instance.
	 * @throws IllegalAccessException
	 *             if the Class or the appropriate constructor is not accessible
	 * @throws InstantiationException
	 *             if this Class represents an abstract class, an array class, a
	 *             primitive type, or void; or if instantiation fails for some
	 *             other reason
	 */
	public DynaBean newInstance() throws IllegalAccessException, InstantiationException {
		DynaActionForm dynaBean = (DynaActionForm) getBeanClass().newInstance();

		dynaBean.setDynaActionFormClass(this);

		FormPropertyConfig[] props = config.findFormPropertyConfigs();

		for (int i = 0; i < props.length; i++) {
			dynaBean.set(props[i].getName(), props[i].initial());
		}

		return (dynaBean);
	}

	// --------------------------------------------------------- Public Methods

	/**
	 *

	 * Render a String representation of this object.
	 *

	 *
	 * @return The string representation of this instance.
	 */
	public String toString() {
		StringBuffer sb = new StringBuffer("DynaActionFormBean[name=");

		sb.append(name);

		DynaProperty[] props = getDynaProperties();

		if (props == null) {
			props = new DynaProperty[0];
		}

		for (int i = 0; i < props.length; i++) {
			sb.append(',');
			sb.append(props[i].getName());
			sb.append('/');
			sb.append(props[i].getType());
		}

		sb.append("]");

		return (sb.toString());
	}

	// --------------------------------------------------------- Static Methods

	/**
	 * Return the DynaActionFormClass instance for the specified
	 * form bean configuration instance.
	 *
	 * @param config
	 *            The config for which the class should be created.
	 * @return The instance for the specified form bean config.
	 */
	public static DynaActionFormClass createDynaActionFormClass(FormBeanConfig config) {
		return config.getDynaActionFormClass();
	}

	// ------------------------------------------------------ Protected Methods

	/**
	 *

	 * Return the implementation class we are using to construct new instances,
	 * re-introspecting our {@link FormBeanConfig} if necessary (that is, after
	 * being deserialized, since beanClass is marked transient).
	 *

	 *
	 * @return The implementation class used to construct new instances.
	 */
	protected Class getBeanClass() {
		if (beanClass == null) {
			introspect(config);
		}

		return (beanClass);
	}

	/**
	 *

	 * Introspect our form bean configuration to identify the supported
	 * properties.
	 *

	 *
	 * @param config
	 *            The FormBeanConfig instance describing the properties of the
	 *            bean to be created
	 * @throws IllegalArgumentException
	 *             if the bean implementation class specified in the
	 *             configuration is not DynaActionForm (or a subclass of
	 *             DynaActionForm)
	 */
	protected void introspect(FormBeanConfig config) {
		this.config = config;

		// Validate the ActionFormBean implementation class
		try {
			beanClass = RequestUtils.applicationClass(config.getType());
		} catch (Throwable t) {
			throw new IllegalArgumentException("Cannot instantiate ActionFormBean class '" + config.getType() + "': "
					+ t);
		}

		if (!DynaActionForm.class.isAssignableFrom(beanClass)) {
			throw new IllegalArgumentException("Class '" + config.getType() + "' is not a subclass of "
					+ "'org.g4studio.core.mvc.xstruts.action.DynaActionForm'");
		}

		// Set the name we will know ourselves by from the form bean name
		this.name = config.getName();

		// Look up the property descriptors for this bean class
		FormPropertyConfig[] descriptors = config.findFormPropertyConfigs();

		if (descriptors == null) {
			descriptors = new FormPropertyConfig[0];
		}

		// Create corresponding dynamic property definitions
		properties = new DynaProperty[descriptors.length];

		for (int i = 0; i < descriptors.length; i++) {
			properties[i] = new DynaProperty(descriptors[i].getName(), descriptors[i].getTypeClass());
			propertiesMap.put(properties[i].getName(), properties[i]);
		}
	}

	// -------------------------------------------------------- Private Methods
}


text:
Ambitious set of mini-frameworks being developed for other LionFire packages, targeting a mix of .NET 5.0 and netstandard2.0 (with some older parts in .NET Framework 4.8.)

Docs: https://lionfire.readthedocs.io
Home: https://open.lionfire.software

# Roadmap

I am fleshing all this out for my own purposes as I need to and am inclined to, with the goal of creating components and frameworks that are useful in the long term.  While I intend for the frameworks and libraries to be decoupled, they may share some common interfaces that hopefully raise the lowest common denominator from the BCL, making some patterns possible that I intend to use heavily, such as multi-typing.

If you find a certain part interesting and want to help advance it into a first class library or framework, let me know.


text:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp">
        <!--核心评价内容-->
        <android.support.v7.widget.RecyclerView
            android:id="@+id/comment_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:divider="@null"
            android:scrollbars="none">
        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
    <!--横线-->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#c9c7c7"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/send"
            android:textSize="@dimen/dp24"/>
    </LinearLayout>

    <!-- 输入框、留言按钮 -->
    <LinearLayout
        android:id="@+id/message"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#CCCCCC"
        android:orientation="horizontal"
        android:visibility="gone">
        <!-- 输入框 -->
        <EditText
            android:id="@+id/user_comment_msg"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:layout_weight="1"
            android:background="#FFFFFF"
            android:gravity="center_vertical"
            android:inputType="textMultiLine"
            android:maxLength="100"
            android:maxLines="6"
            android:minHeight="40dp"/>
        <!-- 留言按钮 -->
        <Button
            android:id="@+id/user_comment_send"
            android:layout_width="50dp"
            android:layout_height="40dp"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="10dp"
            android:background="#FFFFFF"
            android:text="回复"
            android:textColor="#000000"/>
    </LinearLayout>
</LinearLayout>


text:
var MYDATA_DEBUG_ON = false; // activate to show json, form info, etc
var SHOW_PAGINATION = false; // pagination is available
var APPEND_CARDS_TO_BOTTOM = false;  // always starts as false

// bundle text variables
var mydataresult = '';
var mydataresults = '';
var mydataviewnext = '';
var mydatamore = '';
var draft = '';
var inreview = '';
var unpublished = '';
var published = '';
var deaccessioned = '';
var mydatato = '';
var mydataof = '';

function bind_checkbox_labels(){
    // This should be generalized to one function....once css is set

    // ----------------------------------
    // action: Click label next to checkbox;
    // events: (a) check adjacent checkbox
    //         (b) unclick other checkboxes in group; and
    //         (c) submit form
    // ----------------------------------
    bind_checkbox_labels_by_names('mydata_dvobject_label', 'div_dvobject_types');
    bind_checkbox_labels_by_names('mydata_pubstate_label', 'div_published_states');
    bind_checkbox_labels_by_names('mydata_role_label', 'div_role_states');

}

function bind_checkbox_labels_by_names(link_class_name, div_id_name){
    // result type
    $('a.' + link_class_name).on('click',function(){
        $("#selected_page").val('1');
        // Locate the closest checkbox
        var selected_checkbox = $(this).parent().closest('div').find('input[type=checkbox]');
        $("#" + div_id_name + " input[type=checkbox]").each(function(){
            if ($(this).prop('id')== selected_checkbox.prop('id')){
                $(this).prop('checked', true);
           } else{
               $(this).prop('checked', false);
           }
        });
       regular_search();
    });
}

function select_all_mydata_checkboxes(){
    $("#my_data_filter_column input[type=checkbox]").each(function(){
        $(this).prop('checked', true);
    });
}

function bold_checkbox_labels(){
    $("#my_data_filter_column input[type=checkbox]").each(function(){
        if ($(this).prop('checked')){
            $(this).parent().addClass('facetSelected');
       } else{
           $(this).parent().removeClass('facetSelected');
       }
    });
}

//-----------------------------------------
//  Called when mydata_page loads
//  Binds checkboxes, buttons, etc
//-----------------------------------------
function init_mydata_page(){

   //console.log('init_mydata_page');
   $('#div-more-cards-link').hide();
   // var env = new nunjucks.Environment(new nunjucks.WebLoader('/mydata_templates'), true);
    nunjucks.configure({ autoescape: true });

    // Capture checkbox clicks
    //
    $('input:checkbox').on('click',function(){
        $("#selected_page").val('1');
        regular_search();
    });

    // DvObject checkbox labels have different action
    bind_checkbox_labels();

    // Search button next to search box
    $('#btn_find_my_data').on('click',function(e){
        e.preventDefault();
        $("#selected_page").val('1');
        select_all_mydata_checkboxes();
        regular_search();
    });

    // Capture pressing return in search box
    $('#mydata_search_term').keypress(function(e) {
      if (e.which == '13') {
          e.preventDefault();
          $("#selected_page").val('1');
            select_all_mydata_checkboxes();
            regular_search();
      }
    });

    // Capture pressing return in user identifier box
    $('#userIdentifier').keypress(function(e) {
      if (e.which == '13') {
          regular_search();
      }
    });

    // Normal form submit
    /*   mydata_filter_form removed b/c of JSF conflict (ahh..)
    $( "#mydata_filter_form" ).submit(function( event ) {
      //alert( "Handler for .submit() called." );
      event.preventDefault();
      $("#selected_page").val('1');
      regular_search();

    });
    */
    // Run the initial search after user loads .xhtml page
    regular_search(); // run initial search

} // end init_mydata_page

//-----------------------------------------
// clear page elements before displaying new results
//-----------------------------------------
function clearForNewSearchResults(){
    reset_filter_counts();
    clearWarningAlert();
    clearCardResults();
    clearPaginationResults();
    clearJsonResults();
}
function clearJsonResults(){ $("#div-json-results").html('');}
function clearWarningAlert(){ $('#div-result-message').html('');}
function clearCardResults(){ $('#div-card-results').html('');}
function clearPaginationResults(){ $("#div-pagination").html(''); }

//-----------------------------------------
// Show alert with error message
//-----------------------------------------
function setWarningAlert(alert_msg){
    clearCardResults();
    clearPaginationResults();
    var alert_html = '
' + alert_msg + '
';
    $('#div-result-message').html(alert_html);
}

//-----------------------------------------
// Bind pager buttons and "more" scroll button
//-----------------------------------------
function bindPages(){
    // bind pager buttons
    $("a.page_link").click(function(evt) {
       evt.preventDefault(); // stop link from using href
       var page_num = $(this).attr('rel');
       $("#selected_page").val(page_num);  // update the selected page in the form
       regular_search();    // run search
   });
   // bind the "more" button
   $( "#lnk_add_more_cards").unbind( "click" ); // undo last bind
   $("#lnk_add_more_cards").click(function(evt){
       evt.preventDefault(); // stop link from using href
       var page_num = $(this).attr('rel');
       //console.log('use page: ' + page_num);
       $("#selected_page").val(page_num);  // update the selected page in the form
       search_add_more_cards();    // run search
   });
}

/*-----------------------------------------
  These were "flags" at the top of the page
  showing selected categories--they have been removed

  Bind filter tags to (a) uncheck checkbox
   + (b) submit search
 ----------------------------------------- */
function bind_filter_remove_tags(){
    //console.log('bind_filter_remove_tags');
     $("a.lnk_cbox_remove").click(function(evt) {
       evt.preventDefault(); // stop link from using href
       var cbox_id = $(this).attr('rel');
        //console.log('cbox_id: ' + cbox_id);

       $("#" + cbox_id).prop('checked', false);
       regular_search();    // run search
   });
}

//-----------------------------------------
// Search activated by "more" scroll button
//-----------------------------------------
function search_add_more_cards(){
    //console.log('search_add_more_cards init');
    APPEND_CARDS_TO_BOTTOM = true;
    submit_my_data_search();
}
//-----------------------------------------
// Fresh search from checkboxes, pagers, search box, etc
//-----------------------------------------
function regular_search(){
    //console.log('regular_search init');
    APPEND_CARDS_TO_BOTTOM = false;
    submit_my_data_search();
}

// --------------------------------
// Reset the counts for DvObject and Publication Status facets
// --------------------------------
var DTYPE_COUNT_VARS = ["datasets_count", "dataverses_count", "files_count"];   // matches variables in JSON
var PUB_STATUS_COUNT_VARS = ["published_count", "unpublished_count", "draft_count", "deaccessioned_count", "in_review_count"];   // matches variables in JSON

function reset_filter_counts(){
     $.each( DTYPE_COUNT_VARS, function( key, attr_name ) {
          $('#id_' + attr_name).html('');
     });
    $.each( PUB_STATUS_COUNT_VARS, function( key, attr_name ) {
          $('#id_' + attr_name).html('');
     });
}

/* ----------------------------------------------------
 Update the counts for DvObject and Publication Status facets

 Expected JSON for Dataverses, Datasets, Files:
    "dvobject_counts":{"datasets_count":568,"dataverses_count":26,"files_count":11}}

 Expected JSON for Publication Statuses:
    "pubstatus_counts":{"draft_count":439,"deaccessioned_count":2,"unpublished_count":441,"published_count":25},
 ---------------------------------------------------- */
function update_filter_counts(json_info){

    /* ----------------------------------------------------
      (1) Update dvobject counts
     ---------------------------------------------------- */
    // Example: "total_dvobject_counts": {"files_count":10,"dataverses_count":25,"datasets_count":324}
    // --------------------------------------------------
    var dcounts = json_info.data.dvobject_counts;
    really_update_filter_counts(DTYPE_COUNT_VARS, dcounts);

    /* ----------------------------------------------------
     (2) Update publication status counts
    ---------------------------------------------------- */
    var pub_counts = json_info.data.pubstatus_counts;
    really_update_filter_counts(PUB_STATUS_COUNT_VARS, pub_counts);

}

/* ----------------------------------------------------
  Example values:

  attr_name_list = ["datasets_count", "dataverses_count", "files_count"];
  json_counts = {"datasets_count":568,"dataverses_count":26,"files_count":11}
 ---------------------------------------------------- */
function really_update_filter_counts(attr_name_list, json_counts){

    // Iterate through the attributes
    //
    $.each( attr_name_list, function( key, attr_name ) {

        var cnt_span_obj = $('#id_' + attr_name);   // Select the span that holds the count
        var cbox_obj = cnt_span_obj.parent().parent().prev('input');  // Select the associated checkbox
        var is_cbox_checked = cbox_obj.prop('checked');  // Is checkbox checked?

        if (attr_name in json_counts){     // Is the count variable available in the JSON?

            var facet_count = commaSeparateNumber(json_counts[attr_name]);    // YES, get the count

            if (is_cbox_checked){       // Is the checkbox selected?
                cnt_span_obj.html('(' + facet_count  +')'); // Yes, show the count, even if 0
            }else{
                // Checkbox not selected
                if (facet_count > 0){
                    cnt_span_obj.html('(' + facet_count  +')'); // But count is above 0, so show it
                }else{
                    cnt_span_obj.html('');  // Unchecked + no count,  blank it out
                }
            }
        }else{
            cnt_span_obj.html('');  // Attribute name not returned, blank it out
        }
    });
}

/**
 * Create the pager inside the pagination div
 *
 * Example pagination data:
 *
 * {"isNecessary":true,"numResults":361,"docsPerPage":10,"selectedPageNumber":4,
 * "pageCount":37,"pageNumberList":[2,3,4,5,6],"hasPreviousPageNumber":true,
 * "previousPageNumber":3,"hasNextPageNumber":true,"nextPageNumber":5,
 * "startCardNumber":31,"endCardNumber":40}
 *
 **/
function updatePagination(json_data){

    if (json_data.data.hasOwnProperty('pagination')){
        var pagination_json = json_data.data.pagination;
        if (SHOW_PAGINATION){
            // Use nunjucks to create the pagination HTML
            var pagination_html =  nunjucks.render('mydata_templates/pagination.html', pagination_json);

            // Put the pagination HTML into the div
            $("#div-pagination").html(pagination_html);
        }else{
            // Use nunjucks to create the pagination HTML
            var result_msg_html =  nunjucks.render('mydata_templates/result_message_only.html', json_data);

            // Put the pagination HTML into the div
            $("#div-pagination").html(result_msg_html);

        }

        $('#result').html(mydataresult);
        $('#results').html(mydataresults);

        $('#to').html(mydatato);
        $('#of').html(mydataof);

        // --------------------------------
        //  If this isn't the last page, show
        //  a "more results" link after the last card
        // --------------------------------
        if (pagination_json.hasNextPageNumber === true){
            $('#lnk_add_more_cards').attr("rel", pagination_json.nextPageNumber);
            //console.log("update link to: " + pagination_json.nextPageNumber);
            $('#div-more-cards-link').show();

            var view_next = mydataviewnext;
            var more = mydatamore;
            var result_label = mydataresults;
            if (pagination_json.numberNextResults == 1){
                result_label = mydataresult;
            }
            $('#lnk_add_more_cards').html(view_next + ' ' + pagination_json.numberNextResults + ' ' + result_label + ' (' + pagination_json.remainingCards + ' ' + more +')');
        }
        bindPages();
    }
}

// stackoverflow: http://stackoverflow.com/questions/3883342/add-commas-to-a-number-in-jquery
function commaSeparateNumber(val){
    while (/(\d+)(\d{3})/.test(val.toString())){
      val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
    }
    return val;
}

// If an image failed to load, then display the default icon
//
function check_card_images(){
    $("img").on("error",function () {
        if ($(this).hasClass('file_card_img')){
            $(this).next("span").show(); // show default icon in adjacent span
            $(this).hide(); // hide the actual image
            $(this).unbind("error");
        }
    });
}

// --------------------------------
// Run the actual search!
// --------------------------------
function submit_my_data_search(){
    //console.log('submit_my_data_search');
    // --------------------------------
    // Prelims:
    // --------------------------------
    // Hide the "show more cards" button (may already be hidden)
    $('#div-more-cards-link').hide();
    // If needed, clear existing cards and pager
    if (!APPEND_CARDS_TO_BOTTOM){
        clearForNewSearchResults();
    }

    // Style labels
    bold_checkbox_labels();

    // --------------------------------
    // (1) Get the form parameters
    // --------------------------------
    // ah, but with the horribly coded xhtml page, we can't use form tags...
    //var formData = $('#mydata_filter_form').serialize();
    var formData = $("#my_data_filter_column :input").serialize() + '&' + $("#my_data_filter_column2 :input").serialize() ;

    // For debugging, show the search params
    if (MYDATA_DEBUG_ON){
        $("#div-search-params").show();
        $("#div-search-params").html(formData);
    }

    // --------------------------------
    // (2) submit the form
    // --------------------------------
       //console.log('formData: ' + formData);

       $('#ajaxStatusPanel_start').show();

    $.getJSON( RETRIEVE_DATA_API_PATH + '?' + formData, function(data) {

        //  For debugging, show the returned JSON
        if (MYDATA_DEBUG_ON){
            $("#div-json-results").html(JSON.stringify(data));
        }

        // --------------------------------
        // (2a) Does the result look good?
        // --------------------------------
        // No, show error messsage and get out of here
        //console.log('results: ' + data);

        if (!data.success){
            setWarningAlert(data.error_message);
            $('#ajaxStatusPanel_start').hide();
            return;
        }

        // --------------------------------
        // (2b) Looks good, let's make page
        // --------------------------------
        if (data.success){
            // --------------------------------
            // (3) If JSON has pagination info, make a pager
            // --------------------------------
            updatePagination(data);

            // --------------------------------
            // (4) Let's render the cards
            // --------------------------------
            // Pass the solr docs to the cards template
            var card_html =  nunjucks.render('mydata_templates/cards_minimum.html', data);
            if (APPEND_CARDS_TO_BOTTOM){
                //console.log('add cards to bottom results');
                // Add new cards after existing cards
                var newCardsDiv = $('

', { css: { 'display': 'none' }});
                newCardsDiv.html(card_html);

                $("#div-card-results").append(newCardsDiv);
                newCardsDiv.slideDown('slow');;

            }else{
                //console.log('regular search results');
                // Only show new cards
                $("#div-card-results").html(card_html);
            }

            // --------------------------------
            // (5) Update the item counts
            // --------------------------------
            // Expected JSON:    {"datasets_count":568,"dataverses_count":26,"files_count":11}}
            update_filter_counts(data);
            check_card_images();
            // bind_filter_remove_tags();
            $('#ajaxStatusPanel_start').hide();

            if ($("span.label.draft")) {
                var y = $("span.label.draft");
                for (var i = 0; i < y.length; i++) {
                    y[i].innerHTML = draft;
                }
            }
            if ($("span.label.inreview")) {
                var y = $("span.label.inreview");
                for (var i = 0; i < y.length; i++) {
                    y[i].innerHTML = inreview;
                }
            }
            if ($("span.label.published")) {
                var y = $("span.label.published");
                for (var i = 0; i < y.length; i++) {
                    y[i].innerHTML = published;
                }
            }
            if ($("span.label.unpublished")) {
                var y = $("span.label.unpublished");
                for (var i = 0; i < y.length; i++) {
                    y[i].innerHTML = unpublished;
                }
            }
            if ($("span.label.deaccessioned")) {
                var y = $("span.label.deaccessioned");
                for (var i = 0; i < y.length; i++) {
                    y[i].innerHTML = deaccessioned;
                }
            }

            // --------------------------------
            // (6) Update address bar
            // --------------------------------
            /*if (history.pushState){
                window.history.pushState("object or string", "MyData", "/dataverseuser.xhtml?selectTab=dataRelatedToMe&" + formData);
            }*/
        }
    });
}


text:
require_relative '../test_helper'

describe BlinkStick do
  subject { BlinkStick }

  MockDevice = Struct.new :open

  class BlinkStickMock
    def serial
      @serial ||= ('a'..'z').to_a.sample(5).join
    end
  end

  it "must have constant VENDOR_ID 0x20A0" do
    subject::VENDOR_ID.must_equal 0x20A0
  end

  it "must have constant PRODUCT_ID 0x41E5" do
    subject::PRODUCT_ID.must_equal 0x41E5
  end

  describe 'self.usb' do
    it 'must only instantiate one LIBUSB::Context' do
      usb = subject.usb

      subject.usb.must_equal usb
    end
  end

  describe 'self.find_all' do
    it 'will return the located devices instantiated' do
      mock_usb = MiniTest::Mock.new
      return_value = [MockDevice.new, MockDevice.new, MockDevice.new]

      mock_usb.expect :devices, return_value,
       [idVendor: subject::VENDOR_ID, idProduct: subject::PRODUCT_ID]

      subject.stub :usb, mock_usb do
        subject.find_all.length.must_equal 3
      end
    end
  end

  describe 'self.find_by_serial' do
    it "must respond to find_by_serial" do
      subject.must_respond_to :find_by_serial
    end

    it 'must collect the specified serial number' do
      bsm1 = BlinkStickMock.new
      bsm2 = BlinkStickMock.new
      device_array = [bsm1, bsm2]

      serial = bsm2.serial

      subject.stub :find_all, device_array do
        subject.find_by_serial(serial).must_equal bsm2
      end
    end

    it 'must return nil when none is found' do
      bsm1 = BlinkStickMock.new
      bsm2 = BlinkStickMock.new
      device_array = [bsm1, bsm2]

      subject.stub :find_all, device_array do
        subject.find_by_serial('12345').must_be_nil
      end
    end
  end

  describe 'self.first' do
    it 'must return the first available device' do
      bsm1 = BlinkStickMock.new
      bsm2 = BlinkStickMock.new
      device_array = [bsm1, bsm2]

      subject.stub :find_all, device_array do
        subject.first.must_equal bsm1
      end
    end
  end
end


text:
/**
 * Created by lawrencenyakiso on 2016/06/07.
 */
describe('User modules', function(){

    var UserController;

    beforeEach(function(){
        module('jdapp');

        inject(function($controller, $rootScope){
            console.log($controller('UserController'))
            UserController = $controller('UserController');
        })
    });

   it('Should...', function(){
        expect(UserController.top).toEqual('top')
   })

})


text:
import { Component } from '@angular/core';
import '../../../public/css/styles.css';
import { Inject } from '@angular/core';
import { OnInit } from '@angular/core';
import { NameService } from '../name.service.def';

@Component({
  selector: 'hello-two',
  templateUrl: './helloTwo.component.html',
  styleUrls: ['./helloTwo.component.css']
})
export class HelloTwoComponent implements OnInit {
  name: string;

  constructor(@Inject(NameService) private nameService:NameService){

  }

  ngOnInit(): void {
    this.name = this.nameService.getName();
  }
}


text:
<?php

namespace Vehicles;

class Truck extends Vehicle
{
    const EXTRA_FUEL_CONSUMPTION = 1.6;
    const FUEL_LEAKAGE = 5;

    public function __construct(float $fuelQuantity, float $fuelConsumption)
    {
        parent::__construct(
            $fuelQuantity,
            $fuelConsumption + self::EXTRA_FUEL_CONSUMPTION
        );
    }

    public function __toString()
    {
        $fuelLeft   = number_format($this->getFuelQuantity(), 2);
        return 'Truck: ' . $fuelLeft . PHP_EOL;
    }

    public function refuel(float $fuelToAdd)
    {
        parent::refuel($fuelToAdd * ((100 - self::FUEL_LEAKAGE) / 100));
    }

    public function drive(float $distance)
    {
        $className = substr(self::class, strrpos(self::class, '\\') + 1);
        if ($this->canDrive($distance)) {
            echo $className . ' travelled ' . $distance . ' km' . PHP_EOL;
            parent::drive($distance);
        } else {
            throw new \Exception($className . ' needs refueling' . PHP_EOL);
        }
    }
}


text:
/*
 *
 * Header
 *
 */

import React from 'react';
import { connect } from 'react-redux';
import selectHeader from './selectors';
import AppBar from 'material-ui/AppBar';
import styled from 'styled-components';

const AppBarContainer = styled.div`
  position: fixed;
  left: 0;
  top: 0;
  right: 0;
  zIndex: 10;
`;

export class Header extends React.Component { // eslint-disable-line react/prefer-stateless-function
  static propTypes = {
    appbarArgs: React.PropTypes.object,
  }

  render() {
    const { appbarArgs } = this.props;
    if (appbarArgs.hide) {
      return null;
    }
    return <AppBarContainer><AppBar {...appbarArgs} /></AppBarContainer>;
  }
}

const mapStateToProps = selectHeader();

function mapDispatchToProps(dispatch) {
  return {
    dispatch,
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(Header);


text:
import PyBearLibTerminal as terminal

terminal.open()
terminal.printf(2, 1, 'β')
terminal.put(2, 2, 'β')
terminal.refresh()
while True:
    if terminal.has_input():
        key = terminal.read()
        print(key)
        if key == terminal.TK_Q | terminal.TK_KEY_RELEASED:
            print('released')
            break
        elif key == terminal.TK_Q:
            break
terminal.close()