Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prefix action strings to namespace them. #843

Merged
merged 6 commits into from
Jul 2, 2016
Merged

Prefix action strings to namespace them. #843

merged 6 commits into from
Jul 2, 2016

Conversation

ThaJay
Copy link
Contributor

@ThaJay ThaJay commented Jun 21, 2016

I noticed the action constants are very generic strings (not namespaced like 'router_jump' etc.):

export const JUMP_ACTION = 'jump';
export const PUSH_ACTION = 'push';
export const REPLACE_ACTION = 'replace';
export const POP_ACTION2 = 'back';
export const POP_ACTION = 'BackAction';
export const REFRESH_ACTION = 'refresh';
export const RESET_ACTION = 'reset';
export const FOCUS_ACTION = 'focus';

As I understand Redux, all actions get passed to all reducers when you use combineReducers. We see these strings as being so generic that it opens a very real risk of me (or another module I did not read) dispatching an action that evaluates to the same string, triggering an action that was not supposed to be triggered. To prevent this I propose the following change, or any other that diminishes this risk.

At the moment this is not an issue with Redux as we are unable to combine both stores (probably only possible with MobX at the moment?), but as RNRF becomes store agnostic we would need something like this.

prefixed action strings with 'router_' to namespace them.

I noticed the action constants are very generic strings (not namespaced like 'router_jump' etc.):
```
export const JUMP_ACTION = 'jump';
export const PUSH_ACTION = 'push';
export const REPLACE_ACTION = 'replace';
export const POP_ACTION2 = 'back';
export const POP_ACTION = 'BackAction';
export const REFRESH_ACTION = 'refresh';
export const RESET_ACTION = 'reset';
export const FOCUS_ACTION = 'focus';
```
As I understand Redux, all actions get passed to all reducers when you use `combineReducers`. We see these strings as being so generic that it opens a very real risk of me (or another module I did not read) dispatching an action that evaluates to the same string, triggering an action that was not supposed to be triggered. To prevent this I propose the following change, or any other that diminishes this risk.
Prefix actions in Actions.js for namespacing
@mention-bot
Copy link

By analyzing the blame information on this pull request, we identified @joenoon, @rseemann and @r0b1n to be potential reviewers

@charpeni
Copy link
Collaborator

CircleCI failed.

@aksonov
Copy link
Owner

aksonov commented Jun 28, 2016

@joenoon @charpeni Are you ok with this change?

@joenoon
Copy link
Collaborator

joenoon commented Jun 28, 2016

@aksonov I dont use redux and haven't had a need for this. I guess if its really necessary then its fine... but would be good to have someone else verify its a real problem that needs solving.

@aksonov
Copy link
Owner

aksonov commented Jun 28, 2016

@rturk Are you using redux?

@aksonov
Copy link
Owner

aksonov commented Jun 28, 2016

cc @cridenour

@cridenour
Copy link
Collaborator

Not using redux so I can't say for certain. I had the same understand though that all redux actions are combined, but maybe this is something we can accomplish in the redux example in the docs?

@charpeni
Copy link
Collaborator

I can see the use case, but i'm not a redux expert.

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Jun 28, 2016

It's true.
All reducers will be invoked if it filters the same action name.
It's better than nothing in my opinion.

Common approach is to give the action name as less conflict as possible, like ROUTER_FLUX_ACTION_JUMP and so on

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Jun 28, 2016

And it seems we can combine store if you follow the instruction here:
https://github.com/aksonov/react-native-router-flux/blob/master/docs/REDUX_FLUX.md

@cridenour
Copy link
Collaborator

I just think this is supposed to be a flux agnostic library, so while redux would like more specific action names, can we do this on the fly as part of the optional redux docs? If so, I would prefer that.

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Jun 28, 2016

Yeah, both works. Either change it or as optional config.

Since the module is flux agnostic, it is worthy to prefix action name with full module name which makes it clearer actions and avoid potential conflict no matter what flux implementation you are using.

how about REACT_NATIVE_ROUTER_FLUX_JUMP ?
It won't hurt as long as we can import action name as constant.

@joenoon
Copy link
Collaborator

joenoon commented Jun 28, 2016

Looks good

@ThaJay ThaJay changed the title Prefix action strings with 'router_' to namespace them. Prefix action strings to namespace them. Jun 29, 2016
@aksonov aksonov merged commit 2fff2c9 into aksonov:master Jul 2, 2016
@aksonov
Copy link
Owner

aksonov commented Jul 4, 2016

@ThaJay Could you also update Example and docs to avoid complaints #894 , thanks..

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Jul 5, 2016

I can do that. wait a minute

@aksonov
Copy link
Owner

aksonov commented Jul 5, 2016

@zxcpoiu We need to rework it without breaking existing apps.

@aksonov
Copy link
Owner

aksonov commented Jul 5, 2016

Like create map (short names -> redux names) and use it only with dispatch call

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Jul 5, 2016

got it.

@aksonov
Copy link
Owner

aksonov commented Jul 5, 2016

new PR will be welcome.

@farwayer
Copy link

farwayer commented Jul 5, 2016

It should have been minor version bump not patch...

zxcpoiu added a commit to zxcpoiu/react-native-router-flux that referenced this pull request Jul 5, 2016
This is a follow up of aksonov#843 which has been reverted (aksonov#899) since it breaks
existig apps as aksonov#894 described.
zxcpoiu added a commit to zxcpoiu/react-native-router-flux that referenced this pull request Jul 5, 2016
This is a follow up of aksonov#843 which has been reverted (aksonov#899) since it breaks
existig apps as aksonov#894 described.
zxcpoiu added a commit to zxcpoiu/react-native-router-flux that referenced this pull request Jul 5, 2016
This is a follow up of aksonov#843 which has been reverted (aksonov#899) since it breaks
existig apps as aksonov#894 described.
@ThaJay
Copy link
Contributor Author

ThaJay commented Jul 6, 2016

Sorry, haven't checked here in a few days.
Thanks @zxcpoiu for picking it up in the meantime

zxcpoiu added a commit to zxcpoiu/react-native-router-flux that referenced this pull request Jul 8, 2016
This is a follow up of aksonov#843 which has been reverted (aksonov#899) since it breaks
existig apps as aksonov#894 described.

change description:

  * all actions now defined in a separate file: `ActionConst.js`.
  * create an mapping object called: `ActionMap` in `Actions.js`,
    it maps deprecated string literal actions to constant one.

router:

  * will dispatch constant actions if we have dispatch method in props
  * will pass unmodified type into onNavigate.

reducer:

  * always use ActionConst and ActionMap to determine whether an action type matched or not

know issue:

  it's really hard to not break ANY existing app.
  especially for those who:
    1. stores routing status outside from RNRF
    2. use custom reducer instead of RNRF default reducer
  should be always use action constant from RNRF.

it will NOT break if user uses RNRF default reducer.
zxcpoiu added a commit to zxcpoiu/react-native-router-flux that referenced this pull request Jul 8, 2016
This is a follow up of aksonov#843 which has been reverted (aksonov#899) since it breaks
existig apps as aksonov#894 described.

change description:

  * all actions now defined in a separate file: `ActionConst.js`.
  * create an mapping object called: `ActionMap` in `Actions.js`,
    it maps deprecated string literal actions to constant one.

router:

  * will dispatch constant actions if we have dispatch method in props
  * will pass unmodified type into onNavigate.

reducer:

  * always use ActionConst and ActionMap to determine whether an action type matched or not

know issue:

  it's really hard to not break ANY existing app.
  especially for those who:
    1. stores routing status outside from RNRF
    2. use custom reducer instead of RNRF default reducer
  should be always use action constant from RNRF.

it will NOT break if user uses RNRF default reducer.
zxcpoiu added a commit to zxcpoiu/react-native-router-flux that referenced this pull request Jul 8, 2016
This is a follow up of aksonov#843 which has been reverted (aksonov#899) since it breaks
existig apps as aksonov#894 described.

change description:

  * all actions now defined in a separate file: `ActionConst.js`.
  * create an mapping object called: `ActionMap` in `Actions.js`,
    it maps deprecated string literal actions to constant one.

router:

  * will dispatch constant actions if we have dispatch method in props
  * will pass unmodified type into onNavigate.

reducer:

  * always use ActionConst and ActionMap to determine whether an action type matched or not

know issue:

  it's really hard to not break ANY existing app.
  especially for those who:
    1. stores routing status outside from RNRF
    2. use custom reducer instead of RNRF default reducer
  should be always use action constant from RNRF.

it will NOT break if user uses RNRF default reducer.
aksonov pushed a commit that referenced this pull request Jul 8, 2016
* Update Actions.js

prefixed action strings with 'router_' to namespace them.

I noticed the action constants are very generic strings (not namespaced like 'router_jump' etc.):
```
export const JUMP_ACTION = 'jump';
export const PUSH_ACTION = 'push';
export const REPLACE_ACTION = 'replace';
export const POP_ACTION2 = 'back';
export const POP_ACTION = 'BackAction';
export const REFRESH_ACTION = 'refresh';
export const RESET_ACTION = 'reset';
export const FOCUS_ACTION = 'focus';
```
As I understand Redux, all actions get passed to all reducers when you use `combineReducers`. We see these strings as being so generic that it opens a very real risk of me (or another module I did not read) dispatching an action that evaluates to the same string, triggering an action that was not supposed to be triggered. To prevent this I propose the following change, or any other that diminishes this risk.

* Update Reducer.test.js to reflect new action strings

* action strings in Reducer.test.js

* Update action strings as per discussion

*  Update action strings as per discussion

* normalize action name with prefix and expose it from module

This is a follow up of #843 which has been reverted (#899) since it breaks
existig apps as #894 described.

change description:

  * all actions now defined in a separate file: `ActionConst.js`.
  * create an mapping object called: `ActionMap` in `Actions.js`,
    it maps deprecated string literal actions to constant one.

router:

  * will dispatch constant actions if we have dispatch method in props
  * will pass unmodified type into onNavigate.

reducer:

  * always use ActionConst and ActionMap to determine whether an action type matched or not

know issue:

  it's really hard to not break ANY existing app.
  especially for those who:
    1. stores routing status outside from RNRF
    2. use custom reducer instead of RNRF default reducer
  should be always use action constant from RNRF.

it will NOT break if user uses RNRF default reducer.

* update Example to use ActionConst

* change documents related to action type name
aksonov added a commit that referenced this pull request Jul 8, 2017
…#10,#11,#12,#13,#14,#15,#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,#128,#129,#130,#131,#132,#133,#134,#135,#136,#137,#138,#139,#140,#141,#142,#143,#144,#145,#146,#147,#148,#149,#150,#151,#152,#153,#154,#155,#156,#157,#158,#159,#160,#161,#162,#163,#164,#165,#166,#167,#168,#169,#170,#171,#172,#173,#174,#175,#176,#177,#178,#179,#180,#181,#182,#183,#184,#185,#186,#187,#188,#189,#190,#191,#192,#193,#194,#195,#196,#197,#198,#199,#200,#201,#202,#203,#204,#205,#206,#207,#208,#209,#210,#211,#212,#213,#214,#215,#216,#217,#218,#219,#220,#221,#222,#223,#224,#225,#226,#227,#228,#229,#230,#231,#232,#233,#234,#235,#236,#237,#238,#239,#240,#241,#242,#243,#244,#245,#246,#247,#248,#249,#250,#251,#252,#253,#254,#255,#256,#257,#258,#259,#260,#261,#262,#263,#264,#265,#266,#267,#268,#269,#270,#271,#272,#273,#274,#275,#276,#277,#278,#279,#280,#281,#282,#283,#284,#285,#286,#287,#288,#289,#290,#291,#292,#293,#294,#295,#296,#297,#298,#299,#300,#301,#302,#303,#304,#305,#306,#307,#308,#309,#310,#311,#312,#313,#314,#315,#316,#317,#318,#319,#320,#321,#322,#323,#324,#325,#326,#327,#328,#329,#330,#331,#332,#333,#334,#335,#336,#337,#338,#339,#340,#341,#342,#343,#344,#345,#346,#347,#348,#349,#350,#351,#352,#353,#354,#355,#356,#357,#358,#359,#360,#361,#362,#363,#364,#365,#366,#367,#368,#369,#370,#371,#372,#373,#374,#375,#376,#377,#378,#379,#380,#381,#382,#383,#384,#385,#386,#387,#388,#389,#390,#391,#392,#393,#394,#395,#396,#397,#398,#399,#400,#401,#402,#403,#404,#405,#406,#407,#408,#409,#410,#411,#412,#413,#414,#415,#416,#417,#418,#419,#420,#421,#422,#423,#424,#425,#426,#427,#428,#429,#430,#431,#432,#433,#434,#435,#436,#437,#438,#439,#440,#441,#442,#443,#444,#445,#446,#447,#448,#449,#450,#451,#452,#453,#454,#455,#456,#457,#458,#459,#460,#461,#462,#463,#464,#465,#466,#467,#468,#469,#470,#471,#472,#473,#474,#475,#476,#477,#478,#479,#480,#481,#482,#483,#484,#485,#486,#487,#488,#489,#490,#491,#492,#493,#494,#495,#496,#497,#498,#499,#500,#501,#502,#503,#504,#505,#506,#507,#508,#509,#510,#511,#512,#513,#514,#515,#516,#517,#518,#519,#520,#521,#522,#523,#524,#525,#526,#527,#528,#529,#530,#531,#532,#533,#534,#535,#536,#537,#538,#539,#540,#541,#542,#543,#544,#545,#546,#547,#548,#549,#550,#551,#552,#553,#554,#555,#556,#557,#558,#559,#560,#561,#562,#563,#564,#565,#566,#567,#568,#569,#570,#571,#572,#573,#574,#575,#576,#577,#578,#579,#580,#581,#582,#583,#584,#585,#586,#587,#588,#589,#590,#591,#592,#593,#594,#595,#596,#597,#598,#599,#600,#601,#602,#603,#604,#605,#606,#607,#608,#609,#610,#611,#612,#613,#614,#615,#616,#617,#618,#619,#620,#621,#622,#623,#624,#625,#626,#627,#628,#629,#630,#631,#632,#633,#634,#635,#636,#637,#638,#639,#640,#641,#642,#643,#644,#645,#646,#647,#648,#649,#650,#651,#652,#653,#654,#655,#656,#657,#658,#659,#660,#661,#662,#663,#664,#665,#666,#667,#668,#669,#670,#671,#672,#673,#674,#675,#676,#677,#678,#679,#680,#681,#682,#683,#684,#685,#686,#687,#688,#689,#690,#691,#692,#693,#694,#695,#696,#697,#698,#699,#700,#701,#702,#703,#704,#705,#706,#707,#708,#709,#710,#711,#712,#713,#714,#715,#716,#717,#718,#719,#720,#721,#722,#723,#724,#725,#726,#727,#728,#729,#730,#731,#732,#733,#734,#735,#736,#737,#738,#739,#740,#741,#742,#743,#744,#745,#746,#747,#748,#749,#750,#751,#752,#753,#754,#755,#756,#757,#758,#759,#760,#761,#762,#763,#764,#765,#766,#767,#768,#769,#770,#771,#772,#773,#774,#775,#776,#777,#778,#779,#780,#781,#782,#783,#784,#785,#786,#787,#788,#789,#790,#791,#792,#793,#794,#795,#796,#797,#798,#799,#800,#801,#802,#803,#804,#805,#806,#807,#808,#809,#810,#811,#812,#813,#814,#815,#816,#817,#818,#819,#820,#821,#822,#823,#824,#825,#826,#827,#828,#829,#830,#831,#832,#833,#834,#835,#836,#837,#838,#839,#840,#841,#842,#843,#844,#845,#846,#847,#848,#849,#850,#851,#852,#853,#854,#855,#856,#857,#858,#859,#860,#861,#862,#863,#864,#865,#866,#867,#868,#869,#870,#871,#872,#873,#874,#875,#876,#877,#878,#879,#880,#881,#882,#883,#884,#885,#886,#887,#888,#889,#890,#891,#892,#893,#894,#895,#896,#897,#898,#899,#900,#901,#902,#903,#904,#905,#906,#907,#908,#909,#910,#911,#912,#913,#914,#915,#916,#917,#918,#919,#920,#921,#922,#923,#924,#925,#926,#927,#928,#929,#930,#931,#932,#933,#934,#935,#936,#937,#938,#939,#940,#941,#942,#943,#944,#945,#946,#947,#948,#949,#950,#951,#952,#953,#954,#955,#956,#957,#958,#959,#960,#961,#962,#963,#964,#965,#966,#967,#968,#969,#970,#971,#972,#973,#974,#975,#976,#977,#978,#979,#980,#981,#982,#983,#984,#985,#986,#987,#988,#989,#990,#991,#992,#993,#994,#995,#996,#997,#998,#999,#1000,#1001,#1002,#1003,#1004,#1005,#1006,#1007,#1008,#1009,#1010,#1011,#1012,#1013,#1014,#1015,#1016,#1017,#1018,#1019,#1020,#1021,#1022,#1023,#1024,#1025,#1026,#1027,#1028,#1029,#1030,#1031,#1032,#1033,#1034,#1035,#1036,#1037,#1038,#1039,#1040,#1041,#1042,#1043,#1044,#1045,#1046,#1047,#1048,#1049,#1050,#1051,#1052,#1053,#1054,#1055,#1056,#1057,#1058,#1059,#1060,#1061,#1062,#1063,#1064,#1065,#1066,#1067,#1068,#1069,#1070,#1071,#1072,#1073,#1074,#1075,#1076,#1077,#1078,#1079,#1080,#1081,#1082,#1083,#1084,#1085,#1086,#1087,#1088,#1089,#1090,#1091,#1092,#1093,#1094,#1095,#1096,#1097,#1098,#1099,#1100,#1101,#1102,#1103,#1104,#1105,#1106,#1107,#1108,#1109,#1110,#1111,#1112,#1113,#1114,#1115,#1116,#1117,#1118,#1119,#1120,#1121,#1122,#1123,#1124,#1125,#1126,#1127,#1128,#1129,#1130,#1131,#1132,#1133,#1134,#1135,#1136,#1137,#1138,#1139,#1140,#1141,#1142,#1143,#1144,#1145,#1146,#1147,#1148,#1149,#1150,#1151,#1152,#1153,#1154,#1155,#1156,#1157,#1158,#1159,#1160,#1161,#1162,#1163,#1164,#1165,#1166,#1167,#1168,#1169,#1170,#1171,#1172,#1173,#1174,#1175,#1176,#1177,#1178,#1179,#1180,#1181,#1182,#1183,#1184,#1185,#1186,#1187,#1188,#1189,#1190,#1191,#1192,#1193,#1194,#1195,#1196,#1197,#1198,#1199,#1200,#1201,#1202,#1203,#1204,#1205,#1206,#1207,#1208,#1209,#1210,#1211,#1212,#1213,#1214,#1215,#1216,#1217,#1218,#1219,#1220,#1221,#1222,#1223,#1224,#1225,#1226,#1227,#1228,#1229,#1230,#1231,#1232,#1233,#1234,#1235,#1236,#1237,#1238,#1239,#1240,#1241,#1242,#1243,#1244,#1245,#1246,#1247,#1248,#1249,#1250,#1251,#1252,#1253,#1254,#1255,#1256,#1257,#1258,#1259,#1260,#1261,#1262,#1263,#1264,#1265,#1266,#1267,#1268,#1269,#1270,#1271,#1272,#1273,#1274,#1275,#1276,#1277,#1278,#1279,#1280,#1281,#1282,#1283,#1284,#1285,#1286,#1287,#1288,#1289,#1290,#1291,#1292,#1293,#1294,#1295,#1296,#1297,#1298,#1299,#1300,#1301,#1302,#1303,#1304,#1305,#1306,#1307,#1308,#1309,#1310,#1311,#1312,#1313,#1314,#1315,#1316,#1317,#1318,#1319,#1320,#1321,#1322,#1323,#1324,#1325,#1326,#1327,#1328,#1329,#1330,#1331,#1332,#1333,#1334,#1335,#1336,#1337,#1338,#1339,#1340,#1341,#1342,#1343,#1344,#1345,#1346,#1347,#1348,#1349,#1350,#1351,#1352,#1353,#1354,#1355,#1356,#1357,#1358,#1359,#1360,#1361,#1362,#1363,#1364,#1365,#1366,#1367,#1368,#1369,#1370,#1371,#1372,#1373,#1374,#1375,#1376,#1377,#1378,#1379,#1380,#1381,#1382,#1383,#1384,#1385,#1386,#1387,#1388,#1389,#1390,#1391,#1392,#1393,#1394,#1395,#1396,#1397,#1398,#1399,#1400,#1401,#1402,#1403,#1404,#1405,#1406,#1407,#1408,#1409,#1410,#1411,#1412,#1413,#1414,#1415,#1416,#1417,#1418,#1419,#1420,#1421,#1422,#1423,#1424,#1425,#1426,#1427,#1428,#1429,#1430,#1431,#1432,#1433,#1434,#1435,#1436,#1437,#1438,#1439,#1440,#1441,#1442,#1443,#1444,#1445,#1446,#1447,#1448,#1449,#1450,#1451,#1452,#1453,#1454,#1455,#1456,#1457,#1458,#1459,#1460,#1461,#1462,#1463,#1464,#1465,#1466,#1467,#1468,#1469,#1470,#1471,#1472,#1473,#1474,#1475,#1476,#1477,#1478,#1479,#1480,#1481,#1482,#1483,#1484,#1485,#1486,#1487,#1488,#1489,#1490,#1491,#1492,#1493,#1494,#1495,#1496,#1497,#1498,#1499,#1500,#1501,#1502,#1503,#1504,#1505,#1506,#1507,#1508,#1509,#1510,#1511,#1512,#1513,#1514,#1515,#1516,#1517,#1518,#1519,#1520,#1521,#1522,#1523,#1524,#1525,#1526,#1527,#1528,#1529,#1530,#1531,#1532,#1533,#1534,#1535,#1536,#1537,#1538,#1539,#1540,#1541,#1542,#1543,#1544,#1545,#1546,#1547,#1548,#1549,#1550,#1551,#1552,#1553,#1554,#1555,#1556,#1557,#1558,#1559,#1560,#1561,#1562,#1563,#1564,#1565,#1566,#1567,#1568,#1569,#1570,#1571,#1572,#1573,#1574,#1575,#1576,#1577,#1578,#1579,#1580,#1581,#1582,#1583,#1584,#1585,#1586,#1587,#1588,#1589,#1590,#1591,#1592,#1593,#1594,#1595,#1596,#1597,#1598,#1599,#1600,#1601,#1602,#1603,#1604,#1605,#1606,#1607,#1608,#1609,#1610,#1611,#1612,#1613,#1614,#1615,#1616,#1617,#1618,#1619,#1620,#1621,#1622,#1623,#1624,#1625,#1626,#1627,#1628,#1629,#1630,#1631,#1632,#1633,#1634,#1635,#1636,#1637,#1638,#1639,#1640,#1641,#1642,#1643,#1644,#1645,#1646,#1647,#1648,#1649,#1650,#1651,#1652,#1653,#1654,#1655,#1656,#1657,#1658,#1659,#1660,#1661,#1662,#1663,#1664,#1665,#1666,#1667,#1668,#1669,#1670,#1671,#1672,#1673,#1674,#1675,#1676,#1677,#1678,#1679,#1680,#1681,#1682,#1683,#1684,#1685,#1686,#1687,#1688,#1689,#1690,#1691,#1692,#1693,#1694,#1695,#1696,#1697,#1698,#1699,#1700,#1701,#1702,#1703,#1704,#1705,#1706,#1707,#1708,#1709,#1710,#1711,#1712,#1713,#1714,#1715,#1716,#1717,#1718,#1719,#1720,#1721,#1722,#1723,#1724,#1725,#1726,#1727,#1728,#1729,#1730,#1731,#1732,#1733,#1734,#1735,#1736,#1737,#1738,#1739,#1740,#1741,#1742,#1743,#1744,#1745,#1746,#1747,#1748,#1749,#1750,#1751,#1752,#1753,#1754,#1755,#1756,#1757,#1758,#1759,#1760,#1761,#1762,#1763,#1764,#1765,#1766,#1767,#1768,#1769,#1770,#1771,#1772,#1773,#1774,#1775,#1776,#1777,#1778,#1779,#1780,#1781,#1782,#1783,#1784,#1785,#1786,#1787,#1788,#1789,#1790,#1791,#1792,#1793,#1794,#1795,#1796,#1797,#1798,#1799,#1800,#1801,#1802,#1803,#1804,#1805,#1806,#1807,#1808,#1809,#1810,#1811,#1812,#1813,#1814,#1815,#1816,#1817,#1818,#1819,#1820,#1821,#1822,#1823,#1824,#1825,#1826,#1827,#1828,#1829,#1830,#1831,#1832,#1833,#1834,#1835,#1836,#1837,#1838,#1839,#1840,#1841,#1842,#1843,#1844,#1845,#1846,#1847,#1848,#1849,#1850,#1851,#1852,#1853,#1854,#1855,#1856,#1857,#1858,#1859,#1860,#1861,#1862,#1863,#1864,#1865,#1866,#1867,#1868,#1869,#1870,#1871,#1872,#1873,#1874,#1875,#1876,#1877,#1878,#1879,#1880,#1881,#1882,#1883,#1884,#1885,#1886,#1887,#1888,#1889,#1890,#1891,#1892,#1893,#1894,#1895,#1896,#1897,#1898,#1899,#1900,#1901,#1902,#1903,#1904,#1905,#1906,#1907,#1908,#1909,#1910,#1911,#1912,#1913,#1914,#1915,#1916,#1917,#1918,#1919,#1920,#1921,#1922,#1923,#1924,#1925,#1926,#1927,#1928,#1929,#1930,#1931,#1932,#1933,#1934,#1935,#1936,#1937,#1938,#1939,#1940,#1941,#1942,#1943,#1944,#1945,#1946,#1947,#1948,#1949,#1950,#1951,#1952,#1953,#1954,#1955,#1956,#1957,#1958,#1959,#1960,#1961,#1962,#1963,#1964,#1965,#1966,#1967,#1968,#1969,#1970,#1971,#1972,#1973

V4 announcement, v3 is obsolete now.
aksonov added a commit that referenced this pull request Jul 8, 2017
…loses #7,closes #8,closes #9,closes #10,closes #11,closes #12,closes #13,closes #14,closes #15,closes #16,closes #17,closes #18,closes #19,closes #20,closes #21,closes #22,closes #23,closes #24,closes #25,closes #26,closes #27,closes #28,closes #29,closes #30,closes #31,closes #32,closes #33,closes #34,closes #35,closes #36,closes #37,closes #38,closes #39,closes #40,closes #41,closes #42,closes #43,closes #44,closes #45,closes #46,closes #47,closes #48,closes #49,closes #50,closes #51,closes #52,closes #53,closes #54,closes #55,closes #56,closes #57,closes #58,closes #59,closes #60,closes #61,closes #62,closes #63,closes #64,closes #65,closes #66,closes #67,closes #68,closes #69,closes #70,closes #71,closes #72,closes #73,closes #74,closes #75,closes #76,closes #77,closes #78,closes #79,closes #80,closes #81,closes #82,closes #83,closes #84,closes #85,closes #86,closes #87,closes #88,closes #89,closes #90,closes #91,closes #92,closes #93,closes #94,closes #95,closes #96,closes #97,closes #98,closes #99,closes #100,closes #101,closes #102,closes #103,closes #104,closes #105,closes #106,closes #107,closes #108,closes #109,closes #110,closes #111,closes #112,closes #113,closes #114,closes #115,closes #116,closes #117,closes #118,closes #119,closes #120,closes #121,closes #122,closes #123,closes #124,closes #125,closes #126,closes #127,closes #128,closes #129,closes #130,closes #131,closes #132,closes #133,closes #134,closes #135,closes #136,closes #137,closes #138,closes #139,closes #140,closes #141,closes #142,closes #143,closes #144,closes #145,closes #146,closes #147,closes #148,closes #149,closes #150,closes #151,closes #152,closes #153,closes #154,closes #155,closes #156,closes #157,closes #158,closes #159,closes #160,closes #161,closes #162,closes #163,closes #164,closes #165,closes #166,closes #167,closes #168,closes #169,closes #170,closes #171,closes #172,closes #173,closes #174,closes #175,closes #176,closes #177,closes #178,closes #179,closes #180,closes #181,closes #182,closes #183,closes #184,closes #185,closes #186,closes #187,closes #188,closes #189,closes #190,closes #191,closes #192,closes #193,closes #194,closes #195,closes #196,closes #197,closes #198,closes #199,closes #200,closes #201,closes #202,closes #203,closes #204,closes #205,closes #206,closes #207,closes #208,closes #209,closes #210,closes #211,closes #212,closes #213,closes #214,closes #215,closes #216,closes #217,closes #218,closes #219,closes #220,closes #221,closes #222,closes #223,closes #224,closes #225,closes #226,closes #227,closes #228,closes #229,closes #230,closes #231,closes #232,closes #233,closes #234,closes #235,closes #236,closes #237,closes #238,closes #239,closes #240,closes #241,closes #242,closes #243,closes #244,closes #245,closes #246,closes #247,closes #248,closes #249,closes #250,closes #251,closes #252,closes #253,closes #254,closes #255,closes #256,closes #257,closes #258,closes #259,closes #260,closes #261,closes #262,closes #263,closes #264,closes #265,closes #266,closes #267,closes #268,closes #269,closes #270,closes #271,closes #272,closes #273,closes #274,closes #275,closes #276,closes #277,closes #278,closes #279,closes #280,closes #281,closes #282,closes #283,closes #284,closes #285,closes #286,closes #287,closes #288,closes #289,closes #290,closes #291,closes #292,closes #293,closes #294,closes #295,closes #296,closes #297,closes #298,closes #299,closes #300,closes #301,closes #302,closes #303,closes #304,closes #305,closes #306,closes #307,closes #308,closes #309,closes #310,closes #311,closes #312,closes #313,closes #314,closes #315,closes #316,closes #317,closes #318,closes #319,closes #320,closes #321,closes #322,closes #323,closes #324,closes #325,closes #326,closes #327,closes #328,closes #329,closes #330,closes #331,closes #332,closes #333,closes #334,closes #335,closes #336,closes #337,closes #338,closes #339,closes #340,closes #341,closes #342,closes #343,closes #344,closes #345,closes #346,closes #347,closes #348,closes #349,closes #350,closes #351,closes #352,closes #353,closes #354,closes #355,closes #356,closes #357,closes #358,closes #359,closes #360,closes #361,closes #362,closes #363,closes #364,closes #365,closes #366,closes #367,closes #368,closes #369,closes #370,closes #371,closes #372,closes #373,closes #374,closes #375,closes #376,closes #377,closes #378,closes #379,closes #380,closes #381,closes #382,closes #383,closes #384,closes #385,closes #386,closes #387,closes #388,closes #389,closes #390,closes #391,closes #392,closes #393,closes #394,closes #395,closes #396,closes #397,closes #398,closes #399,closes #400,closes #401,closes #402,closes #403,closes #404,closes #405,closes #406,closes #407,closes #408,closes #409,closes #410,closes #411,closes #412,closes #413,closes #414,closes #415,closes #416,closes #417,closes #418,closes #419,closes #420,closes #421,closes #422,closes #423,closes #424,closes #425,closes #426,closes #427,closes #428,closes #429,closes #430,closes #431,closes #432,closes #433,closes #434,closes #435,closes #436,closes #437,closes #438,closes #439,closes #440,closes #441,closes #442,closes #443,closes #444,closes #445,closes #446,closes #447,closes #448,closes #449,closes #450,closes #451,closes #452,closes #453,closes #454,closes #455,closes #456,closes #457,closes #458,closes #459,closes #460,closes #461,closes #462,closes #463,closes #464,closes #465,closes #466,closes #467,closes #468,closes #469,closes #470,closes #471,closes #472,closes #473,closes #474,closes #475,closes #476,closes #477,closes #478,closes #479,closes #480,closes #481,closes #482,closes #483,closes #484,closes #485,closes #486,closes #487,closes #488,closes #489,closes #490,closes #491,closes #492,closes #493,closes #494,closes #495,closes #496,closes #497,closes #498,closes #499,closes #500,closes #501,closes #502,closes #503,closes #504,closes #505,closes #506,closes #507,closes #508,closes #509,closes #510,closes #511,closes #512,closes #513,closes #514,closes #515,closes #516,closes #517,closes #518,closes #519,closes #520,closes #521,closes #522,closes #523,closes #524,closes #525,closes #526,closes #527,closes #528,closes #529,closes #530,closes #531,closes #532,closes #533,closes #534,closes #535,closes #536,closes #537,closes #538,closes #539,closes #540,closes #541,closes #542,closes #543,closes #544,closes #545,closes #546,closes #547,closes #548,closes #549,closes #550,closes #551,closes #552,closes #553,closes #554,closes #555,closes #556,closes #557,closes #558,closes #559,closes #560,closes #561,closes #562,closes #563,closes #564,closes #565,closes #566,closes #567,closes #568,closes #569,closes #570,closes #571,closes #572,closes #573,closes #574,closes #575,closes #576,closes #577,closes #578,closes #579,closes #580,closes #581,closes #582,closes #583,closes #584,closes #585,closes #586,closes #587,closes #588,closes #589,closes #590,closes #591,closes #592,closes #593,closes #594,closes #595,closes #596,closes #597,closes #598,closes #599,closes #600,closes #601,closes #602,closes #603,closes #604,closes #605,closes #606,closes #607,closes #608,closes #609,closes #610,closes #611,closes #612,closes #613,closes #614,closes #615,closes #616,closes #617,closes #618,closes #619,closes #620,closes #621,closes #622,closes #623,closes #624,closes #625,closes #626,closes #627,closes #628,closes #629,closes #630,closes #631,closes #632,closes #633,closes #634,closes #635,closes #636,closes #637,closes #638,closes #639,closes #640,closes #641,closes #642,closes #643,closes #644,closes #645,closes #646,closes #647,closes #648,closes #649,closes #650,closes #651,closes #652,closes #653,closes #654,closes #655,closes #656,closes #657,closes #658,closes #659,closes #660,closes #661,closes #662,closes #663,closes #664,closes #665,closes #666,closes #667,closes #668,closes #669,closes #670,closes #671,closes #672,closes #673,closes #674,closes #675,closes #676,closes #677,closes #678,closes #679,closes #680,closes #681,closes #682,closes #683,closes #684,closes #685,closes #686,closes #687,closes #688,closes #689,closes #690,closes #691,closes #692,closes #693,closes #694,closes #695,closes #696,closes #697,closes #698,closes #699,closes #700,closes #701,closes #702,closes #703,closes #704,closes #705,closes #706,closes #707,closes #708,closes #709,closes #710,closes #711,closes #712,closes #713,closes #714,closes #715,closes #716,closes #717,closes #718,closes #719,closes #720,closes #721,closes #722,closes #723,closes #724,closes #725,closes #726,closes #727,closes #728,closes #729,closes #730,closes #731,closes #732,closes #733,closes #734,closes #735,closes #736,closes #737,closes #738,closes #739,closes #740,closes #741,closes #742,closes #743,closes #744,closes #745,closes #746,closes #747,closes #748,closes #749,closes #750,closes #751,closes #752,closes #753,closes #754,closes #755,closes #756,closes #757,closes #758,closes #759,closes #760,closes #761,closes #762,closes #763,closes #764,closes #765,closes #766,closes #767,closes #768,closes #769,closes #770,closes #771,closes #772,closes #773,closes #774,closes #775,closes #776,closes #777,closes #778,closes #779,closes #780,closes #781,closes #782,closes #783,closes #784,closes #785,closes #786,closes #787,closes #788,closes #789,closes #790,closes #791,closes #792,closes #793,closes #794,closes #795,closes #796,closes #797,closes #798,closes #799,closes #800,closes #801,closes #802,closes #803,closes #804,closes #805,closes #806,closes #807,closes #808,closes #809,closes #810,closes #811,closes #812,closes #813,closes #814,closes #815,closes #816,closes #817,closes #818,closes #819,closes #820,closes #821,closes #822,closes #823,closes #824,closes #825,closes #826,closes #827,closes #828,closes #829,closes #830,closes #831,closes #832,closes #833,closes #834,closes #835,closes #836,closes #837,closes #838,closes #839,closes #840,closes #841,closes #842,closes #843,closes #844,closes #845,closes #846,closes #847,closes #848,closes #849,closes #850,closes #851,closes #852,closes #853,closes #854,closes #855,closes #856,closes #857,closes #858,closes #859,closes #860,closes #861,closes #862,closes #863,closes #864,closes #865,closes #866,closes #867,closes #868,closes #869,closes #870,closes #871,closes #872,closes #873,closes #874,closes #875,closes #876,closes #877,closes #878,closes #879,closes #880,closes #881,closes #882,closes #883,closes #884,closes #885,closes #886,closes #887,closes #888,closes #889,closes #890,closes #891,closes #892,closes #893,closes #894,closes #895,closes #896,closes #897,closes #898,closes #899,closes #900,closes #901,closes #902,closes #903,closes #904,closes #905,closes #906,closes #907,closes #908,closes #909,closes #910,closes #911,closes #912,closes #913,closes #914,closes #915,closes #916,closes #917,closes #918,closes #919,closes #920,closes #921,closes #922,closes #923,closes #924,closes #925,closes #926,closes #927,closes #928,closes #929,closes #930,closes #931,closes #932,closes #933,closes #934,closes #935,closes #936,closes #937,closes #938,closes #939,closes #940,closes #941,closes #942,closes #943,closes #944,closes #945,closes #946,closes #947,closes #948,closes #949,closes #950,closes #951,closes #952,closes #953,closes #954,closes #955,closes #956,closes #957,closes #958,closes #959,closes #960,closes #961,closes #962,closes #963,closes #964,closes #965,closes #966,closes #967,closes #968,closes #969,closes #970,closes #971,closes #972,closes #973,closes #974,closes #975,closes #976,closes #977,closes #978,closes #979,closes #980,closes #981,closes #982,closes #983,closes #984,closes #985,closes #986,closes #987,closes #988,closes #989,closes #990,closes #991,closes #992,closes #993,closes #994,closes #995,closes #996,closes #997,closes #998,closes #999,closes #1000,closes #1001,closes #1002,closes #1003,closes #1004,closes #1005,closes #1006,closes #1007,closes #1008,closes #1009,closes #1010,closes #1011,closes #1012,closes #1013,closes #1014,closes #1015,closes #1016,closes #1017,closes #1018,closes #1019,closes #1020,closes #1021,closes #1022,closes #1023,closes #1024,closes #1025,closes #1026,closes #1027,closes #1028,closes #1029,closes #1030,closes #1031,closes #1032,closes #1033,closes #1034,closes #1035,closes #1036,closes #1037,closes #1038,closes #1039,closes #1040,closes #1041,closes #1042,closes #1043,closes #1044,closes #1045,closes #1046,closes #1047,closes #1048,closes #1049,closes #1050,closes #1051,closes #1052,closes #1053,closes #1054,closes #1055,closes #1056,closes #1057,closes #1058,closes #1059,closes #1060,closes #1061,closes #1062,closes #1063,closes #1064,closes #1065,closes #1066,closes #1067,closes #1068,closes #1069,closes #1070,closes #1071,closes #1072,closes #1073,closes #1074,closes #1075,closes #1076,closes #1077,closes #1078,closes #1079,closes #1080,closes #1081,closes #1082,closes #1083,closes #1084,closes #1085,closes #1086,closes #1087,closes #1088,closes #1089,closes #1090,closes #1091,closes #1092,closes #1093,closes #1094,closes #1095,closes #1096,closes #1097,closes #1098,closes #1099,closes #1100,closes #1101,closes #1102,closes #1103,closes #1104,closes #1105,closes #1106,closes #1107,closes #1108,closes #1109,closes #1110,closes #1111,closes #1112,closes #1113,closes #1114,closes #1115,closes #1116,closes #1117,closes #1118,closes #1119,closes #1120,closes #1121,closes #1122,closes #1123,closes #1124,closes #1125,closes #1126,closes #1127,closes #1128,closes #1129,closes #1130,closes #1131,closes #1132,closes #1133,closes #1134,closes #1135,closes #1136,closes #1137,closes #1138,closes #1139,closes #1140,closes #1141,closes #1142,closes #1143,closes #1144,closes #1145,closes #1146,closes #1147,closes #1148,closes #1149,closes #1150,closes #1151,closes #1152,closes #1153,closes #1154,closes #1155,closes #1156,closes #1157,closes #1158,closes #1159,closes #1160,closes #1161,closes #1162,closes #1163,closes #1164,closes #1165,closes #1166,closes #1167,closes #1168,closes #1169,closes #1170,closes #1171,closes #1172,closes #1173,closes #1174,closes #1175,closes #1176,closes #1177,closes #1178,closes #1179,closes #1180,closes #1181,closes #1182,closes #1183,closes #1184,closes #1185,closes #1186,closes #1187,closes #1188,closes #1189,closes #1190,closes #1191,closes #1192,closes #1193,closes #1194,closes #1195,closes #1196,closes #1197,closes #1198,closes #1199,closes #1200,closes #1201,closes #1202,closes #1203,closes #1204,closes #1205,closes #1206,closes #1207,closes #1208,closes #1209,closes #1210,closes #1211,closes #1212,closes #1213,closes #1214,closes #1215,closes #1216,closes #1217,closes #1218,closes #1219,closes #1220,closes #1221,closes #1222,closes #1223,closes #1224,closes #1225,closes #1226,closes #1227,closes #1228,closes #1229,closes #1230,closes #1231,closes #1232,closes #1233,closes #1234,closes #1235,closes #1236,closes #1237,closes #1238,closes #1239,closes #1240,closes #1241,closes #1242,closes #1243,closes #1244,closes #1245,closes #1246,closes #1247,closes #1248,closes #1249,closes #1250,closes #1251,closes #1252,closes #1253,closes #1254,closes #1255,closes #1256,closes #1257,closes #1258,closes #1259,closes #1260,closes #1261,closes #1262,closes #1263,closes #1264,closes #1265,closes #1266,closes #1267,closes #1268,closes #1269,closes #1270,closes #1271,closes #1272,closes #1273,closes #1274,closes #1275,closes #1276,closes #1277,closes #1278,closes #1279,closes #1280,closes #1281,closes #1282,closes #1283,closes #1284,closes #1285,closes #1286,closes #1287,closes #1288,closes #1289,closes #1290,closes #1291,closes #1292,closes #1293,closes #1294,closes #1295,closes #1296,closes #1297,closes #1298,closes #1299,closes #1300,closes #1301,closes #1302,closes #1303,closes #1304,closes #1305,closes #1306,closes #1307,closes #1308,closes #1309,closes #1310,closes #1311,closes #1312,closes #1313,closes #1314,closes #1315,closes #1316,closes #1317,closes #1318,closes #1319,closes #1320,closes #1321,closes #1322,closes #1323,closes #1324,closes #1325,closes #1326,closes #1327,closes #1328,closes #1329,closes #1330,closes #1331,closes #1332,closes #1333,closes #1334,closes #1335,closes #1336,closes #1337,closes #1338,closes #1339,closes #1340,closes #1341,closes #1342,closes #1343,closes #1344,closes #1345,closes #1346,closes #1347,closes #1348,closes #1349,closes #1350,closes #1351,closes #1352,closes #1353,closes #1354,closes #1355,closes #1356,closes #1357,closes #1358,closes #1359,closes #1360,closes #1361,closes #1362,closes #1363,closes #1364,closes #1365,closes #1366,closes #1367,closes #1368,closes #1369,closes #1370,closes #1371,closes #1372,closes #1373,closes #1374,closes #1375,closes #1376,closes #1377,closes #1378,closes #1379,closes #1380,closes #1381,closes #1382,closes #1383,closes #1384,closes #1385,closes #1386,closes #1387,closes #1388,closes #1389,closes #1390,closes #1391,closes #1392,closes #1393,closes #1394,closes #1395,closes #1396,closes #1397,closes #1398,closes #1399,closes #1400,closes #1401,closes #1402,closes #1403,closes #1404,closes #1405,closes #1406,closes #1407,closes #1408,closes #1409,closes #1410,closes #1411,closes #1412,closes #1413,closes #1414,closes #1415,closes #1416,closes #1417,closes #1418,closes #1419,closes #1420,closes #1421,closes #1422,closes #1423,closes #1424,closes #1425,closes #1426,closes #1427,closes #1428,closes #1429,closes #1430,closes #1431,closes #1432,closes #1433,closes #1434,closes #1435,closes #1436,closes #1437,closes #1438,closes #1439,closes #1440,closes #1441,closes #1442,closes #1443,closes #1444,closes #1445,closes #1446,closes #1447,closes #1448,closes #1449,closes #1450,closes #1451,closes #1452,closes #1453,closes #1454,closes #1455,closes #1456,closes #1457,closes #1458,closes #1459,closes #1460,closes #1461,closes #1462,closes #1463,closes #1464,closes #1465,closes #1466,closes #1467,closes #1468,closes #1469,closes #1470,closes #1471,closes #1472,closes #1473,closes #1474,closes #1475,closes #1476,closes #1477,closes #1478,closes #1479,closes #1480,closes #1481,closes #1482,closes #1483,closes #1484,closes #1485,closes #1486,closes #1487,closes #1488,closes #1489,closes #1490,closes #1491,closes #1492,closes #1493,closes #1494,closes #1495,closes #1496,closes #1497,closes #1498,closes #1499,closes #1500,closes #1501,closes #1502,closes #1503,closes #1504,closes #1505,closes #1506,closes #1507,closes #1508,closes #1509,closes #1510,closes #1511,closes #1512,closes #1513,closes #1514,closes #1515,closes #1516,closes #1517,closes #1518,closes #1519,closes #1520,closes #1521,closes #1522,closes #1523,closes #1524,closes #1525,closes #1526,closes #1527,closes #1528,closes #1529,closes #1530,closes #1531,closes #1532,closes #1533,closes #1534,closes #1535,closes #1536,closes #1537,closes #1538,closes #1539,closes #1540,closes #1541,closes #1542,closes #1543,closes #1544,closes #1545,closes #1546,closes #1547,closes #1548,closes #1549,closes #1550,closes #1551,closes #1552,closes #1553,closes #1554,closes #1555,closes #1556,closes #1557,closes #1558,closes #1559,closes #1560,closes #1561,closes #1562,closes #1563,closes #1564,closes #1565,closes #1566,closes #1567,closes #1568,closes #1569,closes #1570,closes #1571,closes #1572,closes #1573,closes #1574,closes #1575,closes #1576,closes #1577,closes #1578,closes #1579,closes #1580,closes #1581,closes #1582,closes #1583,closes #1584,closes #1585,closes #1586,closes #1587,closes #1588,closes #1589,closes #1590,closes #1591,closes #1592,closes #1593,closes #1594,closes #1595,closes #1596,closes #1597,closes #1598,closes #1599,closes #1600,closes #1601,closes #1602,closes #1603,closes #1604,closes #1605,closes #1606,closes #1607,closes #1608,closes #1609,closes #1610,closes #1611,closes #1612,closes #1613,closes #1614,closes #1615,closes #1616,closes #1617,closes #1618,closes #1619,closes #1620,closes #1621,closes #1622,closes #1623,closes #1624,closes #1625,closes #1626,closes #1627,closes #1628,closes #1629,closes #1630,closes #1631,closes #1632,closes #1633,closes #1634,closes #1635,closes #1636,closes #1637,closes #1638,closes #1639,closes #1640,closes #1641,closes #1642,closes #1643,closes #1644,closes #1645,closes #1646,closes #1647,closes #1648,closes #1649,closes #1650,closes #1651,closes #1652,closes #1653,closes #1654,closes #1655,closes #1656,closes #1657,closes #1658,closes #1659,closes #1660,closes #1661,closes #1662,closes #1663,closes #1664,closes #1665,closes #1666,closes #1667,closes #1668,closes #1669,closes #1670,closes #1671,closes #1672,closes #1673,closes #1674,closes #1675,closes #1676,closes #1677,closes #1678,closes #1679,closes #1680,closes #1681,closes #1682,closes #1683,closes #1684,closes #1685,closes #1686,closes #1687,closes #1688,closes #1689,closes #1690,closes #1691,closes #1692,closes #1693,closes #1694,closes #1695,closes #1696,closes #1697,closes #1698,closes #1699,closes #1700,closes #1701,closes #1702,closes #1703,closes #1704,closes #1705,closes #1706,closes #1707,closes #1708,closes #1709,closes #1710,closes #1711,closes #1712,closes #1713,closes #1714,closes #1715,closes #1716,closes #1717,closes #1718,closes #1719,closes #1720,closes #1721,closes #1722,closes #1723,closes #1724,closes #1725,closes #1726,closes #1727,closes #1728,closes #1729,closes #1730,closes #1731,closes #1732,closes #1733,closes #1734,closes #1735,closes #1736,closes #1737,closes #1738,closes #1739,closes #1740,closes #1741,closes #1742,closes #1743,closes #1744,closes #1745,closes #1746,closes #1747,closes #1748,closes #1749,closes #1750,closes #1751,closes #1752,closes #1753,closes #1754,closes #1755,closes #1756,closes #1757,closes #1758,closes #1759,closes #1760,closes #1761,closes #1762,closes #1763,closes #1764,closes #1765,closes #1766,closes #1767,closes #1768,closes #1769,closes #1770,closes #1771,closes #1772,closes #1773,closes #1774,closes #1775,closes #1776,closes #1777,closes #1778,closes #1779,closes #1780,closes #1781,closes #1782,closes #1783,closes #1784,closes #1785,closes #1786,closes #1787,closes #1788,closes #1789,closes #1790,closes #1791,closes #1792,closes #1793,closes #1794,closes #1795,closes #1796,closes #1797,closes #1798,closes #1799,closes #1800,closes #1801,closes #1802,closes #1803,closes #1804,closes #1805,closes #1806,closes #1807,closes #1808,closes #1809,closes #1810,closes #1811,closes #1812,closes #1813,closes #1814,closes #1815,closes #1816,closes #1817,closes #1818,closes #1819,closes #1820,closes #1821,closes #1822,closes #1823,closes #1824,closes #1825,closes #1826,closes #1827,closes #1828,closes #1829,closes #1830,closes #1831,closes #1832,closes #1833,closes #1834,closes #1835,closes #1836,closes #1837,closes #1838,closes #1839,closes #1840,closes #1841,closes #1842,closes #1843,closes #1844,closes #1845,closes #1846,closes #1847,closes #1848,closes #1849,closes #1850,closes #1851,closes #1852,closes #1853,closes #1854,closes #1855,closes #1856,closes #1857,closes #1858,closes #1859,closes #1860,closes #1861,closes #1862,closes #1863,closes #1864,closes #1865,closes #1866,closes #1867,closes #1868,closes #1869,closes #1870,closes #1871,closes #1872,closes #1873,closes #1874,closes #1875,closes #1876,closes #1877,closes #1878,closes #1879,closes #1880,closes #1881,closes #1882,closes #1883,closes #1884,closes #1885,closes #1886,closes #1887,closes #1888,closes #1889,closes #1890,closes #1891,closes #1892,closes #1893,closes #1894,closes #1895,closes #1896,closes #1897,closes #1898,closes #1899,closes #1900,closes #1901,closes #1902,closes #1903,closes #1904,closes #1905,closes #1906,closes #1907,closes #1908,closes #1909,closes #1910,closes #1911,closes #1912,closes #1913,closes #1914,closes #1915,closes #1916,closes #1917,closes #1918,closes #1919,closes #1920,closes #1921,closes #1922,closes #1923,closes #1924,closes #1925,closes #1926,closes #1927,closes #1928,closes #1929,closes #1930,closes #1931,closes #1932,closes #1933,closes #1934,closes #1935,closes #1936,closes #1937,closes #1938,closes #1939,closes #1940,closes #1941,closes #1942,closes #1943,closes #1944,closes #1945,closes #1946,closes #1947,closes #1948,closes #1949,closes #1950,closes #1951,closes #1952,closes #1953,closes #1954,closes #1955,closes #1956,closes #1957,closes #1958,closes #1959,closes #1960,closes #1961,closes #1962,closes #1963,closes #1964,closes #1965,closes #1966,closes #1967,closes #1968,closes #1969,closes #1970,closes #1971,closes #1972,closes #1973
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants