From 11d986a68c4c55efe275785b28fe29038b7843e1 Mon Sep 17 00:00:00 2001 From: "marpan@google.com" Date: Thu, 28 Jul 2011 17:42:57 +0000 Subject: [PATCH] Update to media_opt_util: (1) update to off-line table for fec (2) corresponding update and some code-cleanup for FecProtectionFactor() Review URL: http://webrtc-codereview.appspot.com/93006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@267 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../video_coding/main/source/fec_tables_xor.h | 12780 ++++++++-------- .../main/source/media_opt_util.cc | 84 +- 2 files changed, 6427 insertions(+), 6437 deletions(-) diff --git a/src/modules/video_coding/main/source/fec_tables_xor.h b/src/modules/video_coding/main/source/fec_tables_xor.h index 3c9eaeb450..2a78f75c17 100644 --- a/src/modules/video_coding/main/source/fec_tables_xor.h +++ b/src/modules/video_coding/main/source/fec_tables_xor.h @@ -15,9 +15,9 @@ namespace webrtc { // Table for Protection factor (code rate) of delta frames, for the XOR FEC. -// Input is the packet loss and average bits/frame (bitRate/frame_rate): -// i.e., codeRateXORTable[k] where k = rate_i*129 + loss_j; loss_j=0,1,..128, -// and rate_i varies over some range +// Input is the packet loss and an effective rate (bits/frame). +// Output is array codeRateXORTable[k], where k = rate_i*129 + loss_j; +// loss_j=0,1,..128, and rate_i varies over some range. const unsigned char VCMCodeRateXORTable[6450] = { 0, 0, @@ -52,6342 +52,4502 @@ const unsigned char VCMCodeRateXORTable[6450] = { 0, 0, 0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -0, -0, -0, -0, -0, -0, -0, -0, -31, -31, -31, -31, -31, -31, -31, -31, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -0, -0, -0, -0, -0, -31, -31, -31, -31, -31, -31, -31, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -0, -0, -0, -0, -31, -31, -31, -31, -31, -31, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -0, -0, -25, -25, -25, -25, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -0, -0, -0, -0, -25, -25, -25, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -0, -0, -0, -0, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -0, -0, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -0, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -0, -0, -0, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -0, -0, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -28, -28, -28, -28, -28, -28, -28, -28, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -0, -0, -28, -28, -28, -28, -28, -28, -28, -28, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -0, -0, -25, -25, -25, -25, -25, -25, -25, -51, -51, -51, -51, -51, -51, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -0, -25, -25, -25, -25, -25, -25, -51, -51, -51, -51, -51, -51, -51, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -23, -23, -23, -23, -23, -23, -23, -46, -46, -46, -46, -46, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -0, -23, -23, -23, -23, -23, -23, -23, -46, -46, -46, -46, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -0, -23, -23, -23, -23, -23, -23, -46, -46, -46, -46, -46, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -0, -21, -21, -21, -21, -21, -42, -42, -42, -42, -42, -42, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -21, -21, -21, -21, -21, -42, -42, -42, -42, -42, -42, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -19, -19, -19, -19, -19, -39, -39, -39, -39, -58, -58, -58, -58, -58, -58, -58, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -0, -19, -19, -19, -19, -39, -39, -39, -39, -39, -58, -58, -58, -58, -58, -58, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -0, -18, -18, -18, -18, -36, -36, -36, -54, -54, -54, -54, -54, -54, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -18, -18, -18, -18, -36, -36, -36, -54, -54, -54, -54, -54, -54, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -18, -18, -18, -18, -36, -36, -36, -54, -54, -54, -54, -54, -54, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -17, -17, -17, -17, -34, -34, -51, -51, -51, -51, -51, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -0, -17, -17, -17, -17, -34, -34, -51, -51, -51, -51, -51, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -0, -15, -15, -15, -31, -31, -31, -47, -47, -47, -47, -63, -63, -63, -63, -63, -63, -63, -63, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -15, -15, -15, -31, -31, -31, -47, -47, -47, -47, -63, -63, -63, -63, -63, -63, -63, -63, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -15, -15, -15, -30, -30, -30, -45, -45, -45, -60, -60, -60, -60, -60, -60, -60, -60, -75, -75, -75, -75, -75, -75, -75, -75, -75, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -0, -15, -15, -15, -30, -30, -30, -45, -45, -45, -60, -60, -60, -60, -60, -60, -60, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -0, -15, -15, -15, -30, -30, -45, -45, -45, -45, -60, -60, -60, -60, -60, -60, -60, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -0, -14, -14, -28, -28, -28, -42, -42, -56, -56, -56, -56, -56, -70, -70, -70, -70, -70, -70, -70, -70, -70, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -14, -14, -28, -28, -28, -42, -42, -56, -56, -56, -56, -56, -70, -70, -70, -70, -70, -70, -70, -70, -70, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -13, -13, -26, -26, -40, -40, -40, -40, -53, -53, -67, -67, -67, -67, -67, -67, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -0, -13, -13, -26, -26, -40, -40, -40, -40, -53, -53, -67, -67, -67, -67, -67, -67, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -0, -12, -12, -25, -25, -38, -38, -38, -38, -63, -63, -63, -63, -63, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -12, -12, -25, -25, -38, -38, -38, -38, -63, -63, -63, -63, -63, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -0, -12, -12, -24, -24, -36, -36, -48, -48, -48, -48, -60, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -0, -12, -12, -24, -24, -36, -36, -48, -48, -48, -48, -60, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -0, -12, -12, -24, -24, -36, -48, -48, -48, -48, -48, -60, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -0, 11, 11, -23, -34, -34, -34, -46, -46, -57, -57, -57, -57, -57, -57, -69, -69, -69, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, +11, +11, +11, +11, +11, +11, +11, +11, +11, +11, +11, +11, +11, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +39, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, +51, 0, -11, -11, -23, -34, -34, -34, -46, -46, -57, -57, -57, -57, -57, -57, -69, -69, -69, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 0, -11, -11, -22, -33, -33, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +8, +8, +8, +8, +8, +8, +8, +8, +8, +8, +8, +8, +8, +8, +8, +30, +30, +30, +30, +30, +30, +30, +30, +30, +30, +30, +30, +30, +30, +30, +56, +56, +56, +56, +56, +56, +56, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +65, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +78, +78, +78, +78, +78, +78, +78, +78, +78, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +0, +6, +6, +6, +23, +23, +23, +23, +23, +23, +23, +23, +23, +23, +23, +23, +23, +23, +23, 44, 44, 44, +44, +44, +44, +50, +50, +50, +50, +50, +50, +50, +50, +50, +68, +68, +68, +68, +68, +68, +68, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +85, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +88, +88, +88, +88, +88, +88, +88, +88, +88, +0, +0, +0, +0, +0, +0, +0, +0, +0, +5, +5, +5, +5, +5, +5, +19, +19, +19, +36, +41, +41, +41, +41, +41, +41, +41, +41, +41, +41, +41, +41, +41, +41, 55, +55, +55, +55, +55, +55, +69, +69, +69, +69, +69, +69, +69, +69, +69, +75, +75, +80, +80, +80, +80, +80, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +100, +100, +100, +100, +100, +100, +100, +100, +100, +0, +0, +0, +0, +0, +0, +0, +0, +4, +16, +16, +16, +16, +16, +16, +30, +35, +35, +47, +58, +58, +58, +58, +58, +58, +58, +58, +58, +58, +58, +58, +58, +58, +63, +63, +63, +63, +63, +63, +77, +77, +77, +77, +77, +77, +77, +82, +82, +82, +82, +94, +94, +94, +94, +94, +105, +105, +105, +105, +110, +110, +110, +110, +110, +110, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +115, +115, +115, +115, +115, +115, +115, +115, +115, +0, +0, +0, +0, +0, +0, +0, +4, +14, +27, +27, +27, +27, +27, +31, +41, +52, +52, +56, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +69, +79, +79, +79, +79, +83, +83, +83, +94, +94, +94, +94, +106, +106, +106, +106, +106, +115, +115, +115, +115, +125, +125, +125, +125, +125, +125, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +0, +0, +3, +3, +3, +17, +28, +38, +38, +38, +38, +38, +47, +51, +63, +63, +63, +72, +72, +72, +72, +72, +72, +72, +76, +76, +76, +76, +80, +80, +80, +80, +80, +80, +80, +80, +80, +84, +84, +84, +84, +93, +93, +93, +105, +105, +105, +105, +114, +114, +114, +114, +114, +124, +124, +124, +124, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +0, +0, +12, +12, +12, +35, +43, +47, +47, +47, +47, +47, +58, +58, 66, 66, 66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -88, -88, -88, -88, -88, -88, -88, -88, +70, +70, +70, +70, +70, +73, +73, +82, +82, +82, +86, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +105, +105, +105, +114, +114, +114, +114, +117, +117, +117, +117, +117, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +0, +0, +24, +24, +24, +49, +53, +53, +53, +53, +53, +53, +61, +61, +64, +64, +64, +64, +70, +70, +70, +70, +78, +78, 88, 88, 88, +96, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +112, +112, +112, +120, +120, +120, +124, +124, +124, +124, +124, +124, +124, +124, +124, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +0, +5, +36, +36, +36, +55, +55, +55, +55, +55, +55, +55, +58, +58, +58, +58, +58, +64, +78, +78, +78, +78, +87, +87, +94, +94, +94, +103, +110, +110, +110, +110, +110, +110, +110, +110, +116, +116, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +0, +18, +43, +43, +43, +53, +53, +53, +53, +53, +53, +53, +53, +58, +58, +58, +58, +71, +87, +87, +87, +87, +94, +94, +97, +97, +97, +109, +111, +111, +111, +111, +111, +111, +111, +111, +125, +125, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +0, +31, +46, +46, +46, +48, +48, +48, +48, +48, +48, +48, +48, +66, +66, +66, +66, +80, +93, +93, +93, +93, +95, +95, +95, +95, +100, +115, +115, +115, +115, +115, +115, +115, +115, +115, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +4, +40, +45, +45, +45, +45, +45, +45, +45, +45, +49, +49, +49, +74, +74, +74, +74, +86, +90, +90, +90, +90, +95, +95, +95, +95, +106, +120, +120, +120, +120, +120, +120, +120, +120, +120, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +14, +42, +42, +42, +42, +42, +42, +42, +42, +46, +56, +56, +56, +80, +80, +80, +80, +84, +84, +84, +84, 88, 99, 99, 99, 99, -99, -99, -99, -99, -99, -99, -99, +111, +122, +122, +122, +122, +122, +122, +122, +122, +122, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +0, +26, +40, +40, +40, +40, +40, +40, +40, +40, +54, +66, +66, +66, +80, +80, +80, +80, +80, +80, +80, +84, +94, +106, +106, +106, +106, +116, +120, +120, +120, +120, +120, +120, +120, +120, +124, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +3, +34, +38, +38, +38, +38, +38, +42, +42, +42, +63, +72, +72, +76, +80, +80, +80, +80, +80, +80, +80, +89, +101, +114, +114, +114, +114, +118, +118, +118, +118, +118, +118, +118, +118, +118, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +12, +36, +36, +36, +36, +36, +36, +49, +49, +49, +69, +73, +76, +86, +86, +86, +86, +86, +86, +86, +86, +97, +109, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +22, +34, +34, +34, +34, +38, +38, +57, +57, +57, +69, +73, +82, +92, +92, +92, +92, +92, +92, +96, +96, +104, +117, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +29, +33, +33, +33, +33, +44, +44, +62, +62, +62, +69, +77, +87, +95, +95, +95, +95, +95, +95, +107, +107, +110, +120, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +31, +31, +31, +31, +31, +51, +51, +62, +65, +65, +73, +83, +91, +94, +94, +94, +94, +97, +97, +114, +114, +114, +122, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +29, +29, +29, +29, +29, +56, +56, +59, +70, +70, +79, +86, +89, +89, +89, +89, +89, +100, +100, +116, +116, +116, +122, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +28, +28, +28, +28, +28, +57, +57, +57, +76, +76, +83, +86, +86, +86, +86, +86, +89, +104, +104, +114, +114, +114, +124, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +27, +27, +27, +27, +30, +55, +55, +55, +80, +80, +83, +86, +86, +86, +86, +86, +93, +108, +108, +111, +111, +111, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +26, +26, +26, +26, +36, +53, +53, +53, +80, +80, +80, +90, +90, +90, +90, +90, +98, +107, +107, +107, +107, +107, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +26, +26, +26, +28, +42, +52, +54, +54, +78, +78, +78, +95, +95, +95, +97, +97, +104, +106, +106, +106, +106, +106, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +24, +24, +24, +33, +47, +49, +58, +58, +74, +74, +74, +97, +97, +97, +106, +106, +108, +108, +108, +108, +108, +108, +124, +124, +124, +124, +124, +124, +124, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +24, +24, +24, +39, +48, +50, +63, +63, +72, +74, +74, +96, +96, +96, +109, +111, +111, +111, +111, +111, +111, +111, +119, +119, +122, +122, +122, +122, +122, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +23, +23, +23, +43, +46, +54, +66, +66, +69, +77, +77, +92, +92, +92, +105, +113, +113, +113, +113, +113, +113, +113, +115, +117, +123, +123, +123, +123, +123, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +22, +22, +22, +44, +44, +59, +67, +67, +67, +81, +81, +89, +89, +89, +97, +112, +112, +112, +112, +112, +112, +112, +112, +119, +126, +126, +126, +126, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +21, +21, +24, +43, +45, +63, +65, +65, +67, +85, +85, +87, +87, +87, +91, +109, +109, +109, +111, +111, +111, +111, +111, +123, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +21, +21, +28, +42, +50, +63, +63, +66, +71, +85, +85, +85, +85, +87, +92, +106, +106, +108, +114, +114, +114, +114, +114, +125, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +20, +20, +34, +41, +54, +62, +62, +69, +75, +82, +82, +82, +82, +92, +98, +105, +105, +110, +117, +117, +117, +117, +117, +124, +124, +126, +126, +126, +126, +126, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +20, +20, +38, +40, +58, +60, +60, +73, +78, +80, +80, +80, +80, +100, +105, +107, +107, +113, +118, +118, +118, +118, +118, +120, +120, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +19, +21, +38, +40, +58, +58, +60, +75, +77, +77, +77, +81, +81, +107, +109, +109, +109, +114, +116, +116, +116, +116, +116, +116, +116, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +18, +25, +37, +44, +56, +56, +63, +75, +75, +75, +75, +88, +88, +111, +111, +111, +111, +112, +112, +112, +112, +112, +112, +112, +114, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +18, +30, +36, +48, +55, +55, +67, +73, +73, +73, +73, +97, +97, 110, 110, 110, @@ -6399,76 +4559,1916 @@ const unsigned char VCMCodeRateXORTable[6450] = { 110, 110, 110, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, +116, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +18, +34, +36, +52, +55, +55, +70, +72, +73, +73, +73, +102, +104, +108, +108, +108, +108, +109, +109, +109, +109, +109, +109, +109, +119, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +17, +35, +35, +52, +59, +59, +70, +70, +76, +76, +76, +99, +105, +105, +105, +105, +105, +111, +111, +111, +111, +111, +111, +111, +121, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +17, +34, +36, +51, +61, +62, +70, +70, +80, +80, +80, +93, +103, +103, +103, +103, +103, +112, +112, +112, +112, +112, +116, +118, +124, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +16, +33, +39, +50, +59, +65, +72, +72, +82, +82, +82, +91, +100, +100, +100, +100, +100, +109, +109, +109, +109, +109, +121, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +16, +32, +43, +48, +54, +66, +75, +75, +81, +83, +83, +92, +97, +97, +97, +99, +99, +105, +105, +105, +105, +105, +123, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +15, +31, +46, +47, +49, +69, +77, +77, +81, +85, +85, +93, +95, +95, +95, +100, +100, +102, +102, +102, +102, +102, +120, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +15, +30, +46, +48, +48, +70, +75, +79, +82, +87, +87, +92, +94, +94, +94, +103, +103, +103, +103, +103, +104, +104, +115, +120, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +15, +30, +45, +50, +50, +68, +70, +80, +85, +89, +89, +90, +95, +95, +95, +104, +104, +104, +104, +104, +109, +109, +112, +114, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +14, +29, +44, +54, +54, +64, +64, +83, +87, +88, +88, +88, +98, +98, +98, +103, +103, +103, +103, +103, +113, +113, +113, +113, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +14, +29, +43, +56, +56, +61, +61, +84, +85, +88, +88, +88, +100, +100, +100, +102, +102, +102, +102, +102, +113, +116, +116, +116, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +14, +28, +42, +57, +57, +62, +62, +80, +80, +91, +91, +91, +100, +100, +100, +100, +100, +100, +100, +100, +109, +119, +119, +119, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +14, +28, +42, +56, +56, +65, +66, +76, +76, +92, +92, +92, +97, +97, +97, +101, +101, +101, +101, +101, +106, +121, +121, +121, +126, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +13, +27, +41, +55, +55, +67, +72, +74, +74, +90, +90, +90, +91, +91, +91, +105, +105, +105, +105, +105, +107, +122, +122, +122, +123, +123, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +0, +13, +27, +40, +54, +54, +67, +76, +76, +76, +85, +85, +85, +85, +85, +85, +112, +112, +112, +112, +112, +112, +121, +121, +121, +121, +121, +126, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, }; diff --git a/src/modules/video_coding/main/source/media_opt_util.cc b/src/modules/video_coding/main/source/media_opt_util.cc index a4aa983e67..795f05aae8 100644 --- a/src/modules/video_coding/main/source/media_opt_util.cc +++ b/src/modules/video_coding/main/source/media_opt_util.cc @@ -306,9 +306,8 @@ VCMFecMethod::ProtectionFactor(const VCMProtectionParameters* parameters) { // FEC PROTECTION SETTINGS: varies with packet loss and bitrate - WebRtc_UWord8 packetLoss = (WebRtc_UWord8) (255 * parameters->lossPr); - // No protection if (filtered) packetLoss is 0 + WebRtc_UWord8 packetLoss = (WebRtc_UWord8) (255 * parameters->lossPr); if (packetLoss == 0) { _protectionFactorK = 0; @@ -316,62 +315,57 @@ VCMFecMethod::ProtectionFactor(const VCMProtectionParameters* parameters) return true; } - // Size of tables + // Parameters for FEC setting: + // first partition size, thresholds, table pars, spatial resoln fac. + + // First partition protection: ~ 20% + WebRtc_UWord8 firstPartitionProt = (WebRtc_UWord8) (255 * 0.20); + + // Threshold on packetLoss and bitRrate/frameRate (=average #packets), + // above which we allocate protection to cover at least first partition. + WebRtc_UWord8 lossThr = 0; + WebRtc_UWord8 packetNumThr = 1; + + // Size of table const WebRtc_UWord16 maxFecTableSize = 6450; // Parameters for range of rate and packet loss for tables const WebRtc_UWord8 ratePar1 = 5; const WebRtc_UWord8 ratePar2 = 49; const WebRtc_UWord8 plossMax = 129; + // Spatial resolution size, relative to a reference size. + float spatialSizeToRef = static_cast + (parameters->codecWidth * parameters->codecHeight) / + (static_cast(704 * 576)); + // resolnFac: This parameter will generally increase/decrease the FEC rate + // (for fixed bitRate and packetLoss) based on system size. + // Use a smaller exponent (< 1) to control/soften system size effect. + const float resolnFac = 1.0 / pow(spatialSizeToRef, 0.3); + const float bitRate = parameters->bitRate; + const float frameRate = parameters->frameRate; - // Total (avg) bits available per frame: total rate over actual/frame_rate. - // Units are kbits/frame + // Average bits per frame (units of kbits) const WebRtc_UWord16 bitRatePerFrame = static_cast - (bitRate / - (parameters->frameRate)); + (bitRate / frameRate); - // TODO (marpan): Incorporate frame size (bpp) into FEC setting - - // Total (avg) number of packets per frame (source and fec): + // Average number of packets per frame (source and fec): const WebRtc_UWord8 avgTotPackets = 1 + (WebRtc_UWord8) ((float) bitRatePerFrame * 1000.0 / (float) (8.0 * _maxPayloadSize) + 0.5); - - // First partition protection: ~ 20% - WebRtc_UWord8 firstPartitionProt = (WebRtc_UWord8) (255 * 0.20); - - // Threshold on packetLoss and bitRrate/frameRate (=average #packets), - // above which we allocate protection to cover at least roughly - // first partition size. - WebRtc_UWord8 lossThr = 0; - WebRtc_UWord8 packetNumThr = 1; - - // Modulation of protection with available bits/frame (or avgTotpackets) - float weight1 = 0.5; - float weight2 = 0.5; - if (avgTotPackets > 4) - { - weight1 = 0.75; - weight2 = 0.25; - } - if (avgTotPackets > 6) - { - weight1 = 1.5; - weight2 = 0.; - } - // FEC rate parameters: for P and I frame WebRtc_UWord8 codeRateDelta = 0; WebRtc_UWord8 codeRateKey = 0; - // Get index for table: the FEC protection depends on the (average) - // available bits/frame. The range on the rate index corresponds to rates - // (bps) from 200k to 8000k, for 30fps + // Get index for table: the FEC protection depends on an effective rate. + // The range on the rate index corresponds to rates (bps) + // from ~200k to ~8000k, for 30fps + const WebRtc_UWord16 effRateFecTable = static_cast + (resolnFac * bitRatePerFrame); WebRtc_UWord8 rateIndexTable = - (WebRtc_UWord8) VCM_MAX(VCM_MIN((bitRatePerFrame - ratePar1) / - ratePar1, ratePar2), 0); + (WebRtc_UWord8) VCM_MAX(VCM_MIN((effRateFecTable - ratePar1) / + ratePar1, ratePar2), 0); // Restrict packet loss range to 50: // current tables defined only up to 50% @@ -389,11 +383,6 @@ VCMFecMethod::ProtectionFactor(const VCMProtectionParameters* parameters) if (packetLoss > lossThr && avgTotPackets > packetNumThr) { - // Average with minimum protection level given by (average) total - // number of packets - codeRateDelta = static_cast((weight1 * - (float) codeRateDelta + weight2 * 255.0 / (float) avgTotPackets)); - // Set a minimum based on first partition size. if (codeRateDelta < firstPartitionProt) { @@ -407,8 +396,9 @@ VCMFecMethod::ProtectionFactor(const VCMProtectionParameters* parameters) codeRateDelta = plossMax - 1; } - float adjustFec = _qmRobustness->AdjustFecFactor(codeRateDelta, bitRate, - parameters->frameRate, + float adjustFec = _qmRobustness->AdjustFecFactor(codeRateDelta, + bitRate, + frameRate, parameters->rtt, packetLoss); @@ -426,7 +416,7 @@ VCMFecMethod::ProtectionFactor(const VCMProtectionParameters* parameters) packetFrameKey); rateIndexTable = (WebRtc_UWord8) VCM_MAX(VCM_MIN( - 1 + (boostKey * bitRatePerFrame - ratePar1) / + 1 + (boostKey * effRateFecTable - ratePar1) / ratePar1,ratePar2),0); WebRtc_UWord16 indexTableKey = rateIndexTable * plossMax + packetLoss;